Заполните последовательность, содержащую NaN - PullRequest
0 голосов
/ 23 марта 2019

Ним языковой вопрос здесь. Я хочу прочитать серию операций с плавающей запятой из stdin (этот пример: 7, 1, 4, 4, nan, 4) и сохранить их в типе seq[float]. Вход может содержать NaNs. Но я не могу интегрировать такие выбросы.

Мой код:

var
  line: TaintedString
  timeSeries: seq[float]

while readline(stdin, line) != false:
  echo timeSeries
  timeSeries.add(parseFloat(line))

Выход:

@[]
@[7.0]
@[7.0, 1.0]
@[7.0, 1.0, 4.0]
@[7.0, 1.0, 4.0, 4.0]
@[7.0, 1.0, 4.0, 4.0, nan]
@[nan, nan, nan, nan, nan, nan]

Обращаясь к первому NaN, Ним отображает все входные данные как NaN. Но я хочу это (последняя строка вывода):

@[7.0, 1.0, 4.0, 4.0, nan, 4.0]

Как мне решить это правильно в Nim? Документация говорит, что NaN поддерживаются ...

1 Ответ

2 голосов
/ 23 марта 2019

Так как вы повторяете timeSeries перед , вы добавляете следующее число, ввод последней строки с 4 вызывает @[7.0, 1.0, 4.0, 4.0, nan], и это - догадка, что вы сделали после этого, чтобы получить финалвыходная линия.Хотя я сомневаюсь, что есть веская причина для чего-либо устанавливать каждое значение в последовательности на NaN, возможно, что ваш ввод вызвал ошибку.

Мне не удалось воспроизвести ваши выходные данные с вашим кодом (добавив требуемый import strutils) при вводе вашей последовательности, за которой следует другая 4, nan или пустая строка (последняя ошибка при неправильном перемещении).

Для упрощения тестирования я поместил ваш ввод в файл input.txt:

7
1  
4
4
nan
4

и запустил следующее в последней стабильной версии nim (Nim Compiler Version 0.19.4 [Linux]: amd64]) как последняя версия devel nim (Nim Compiler версии 0.19.9 [Linux: amd64]):

import strutils

var
  line: TaintedString
  timeSeries: seq[float]

echo timeSeries
for line in "input.txt".lines:
  timeSeries.add(parseFloat(line.strip))
  echo timeSeries

(.strip существует только для обработки конечных пробелов во входных данных, которые былирезультат вырезания и вставки и небрежного редактирования)

Вывод обоих компиляторов:

@[]
@[7.0]
@[7.0, 1.0]
@[7.0, 1.0, 4.0]
@[7.0, 1.0, 4.0, 4.0]
@[7.0, 1.0, 4.0, 4.0, nan]
@[7.0, 1.0, 4.0, 4.0, nan, 4.0]

компиляция с -d:release также не вызвала ошибок.

...