Текущий архив: 2005.06.06;
Скачать: CL | DM;
Вниз
Результат NaN Найти похожие ветки
← →
Karlson © (2005-05-23 18:29) [0]Добрый день. Оперирую набором действительных чисел в пределах от 0 до 1. Над ними выполняю различные операции, такие как умножение, сложение, вычисление определенных функций. В некоторых случаях результатом есть NaN. С чем это связано? И что может быть причиной, как устранить? Логики в появлении такого результата уловить не могу, так как оперирую со случайных набором из 600 чисел.
Заранее спасибо.
← →
Yanis © (2005-05-23 18:51) [1]17ю строку проверял? Ошибка там.
← →
Anatoly Podgoretsky © (2005-05-23 18:58) [2]Nan := 0/0
← →
Karlson © (2005-05-23 19:04) [3]To Yanis
Какая 17 строка???
To Anatoly Podgoretsky
А если у меня нет деления на ноль? у меня одна функция с дробью, но там в знаменателе 1+е^... .
← →
Yanis © (2005-05-23 19:14) [4]
> To Yanis
> Какая 17 строка???
Строчка кода, в которой обычно и таится ошибка :)
← →
Arm79 © (2005-05-23 19:16) [5]Karlson © (23.05.05 19:04) [3]
Пример
a = 0.5
d = e^-700
c = a/b
d = NaN
предлагаю сделать так
try
c := a/b
except
MessageDlg(FloatToStr(a)+"-"+FloatToStr(b));
end;
← →
Злобная Танька (2005-05-23 19:45) [6]есть функция IsNaN вообще для таких случаев!
← →
Karlson © (2005-05-23 20:09) [7]To Злобная Танька
Не расскажете подробнее?
← →
Marser © (2005-05-23 20:13) [8]
> Karlson © (23.05.05 20:09) [7] [Новое
>сообщение][Ответить]
>To Злобная Танька
> Не расскажете подробнее?
Хелп рулит:function IsNan(const AValue: Double): Boolean;
Description
Use IsNan to test whether the value specified by AValue represents NaN (not a number). Note that NaN is distinct from positive and negative infinity, which can be detected using the IsInfinite function.
← →
злобная танька (2005-05-23 20:15) [9]ну я имею ввиду что наверно это будет работать быстрее чем через try..except, как предлагалось выше.
т.е. пишем
if not IsNan(a/b) then c := a/b else showmessage("нифига!");
← →
Karlson © (2005-05-23 20:20) [10]А если меня "нифига" не устраивает... у меня же нет деления на ноль... я не понимаю почему оно появляется...
← →
Yanis © (2005-05-23 20:27) [11]
> А если меня "нифига" не устраивает... у меня же нет деления на
> ноль... я не понимаю почему оно появляется...
В таком случае см. [1], [4]
← →
Karlson © (2005-05-23 20:31) [12]To Yanis
дельное бы чего посоветовал...
← →
Yanis © (2005-05-23 20:39) [13]2 [12]
Выложи здесь код, который по твоему предположению "не работает". Тогда дельных советов больше будет (может быть).
← →
Karlson © (2005-05-23 20:43) [14]не могу... меня попросили выяснить. а кода не давали... просто отчего возникает такая ошибка и как все-таки вернуть число, а не Нан... какая разница какой код... если в знаменателе "все красиво"...
← →
Просто Джо © (2005-05-23 20:47) [15]
> в знаменателе "все красиво"...
Ну, так хоть пример красивых знаменателей
← →
злобная танька (2005-05-23 20:49) [16]если результат выражения - NaN, как можно вместо него вернуть число? NaN это даже не бесконечность, это вообще нифига.
а отчиво возникает - вам уже написали: 0.0 / 0.0
ето можно было и в хелпе написать.
короче ловите NaN и возвращяйте вместо него какое-нибудь прикольное число по рандому например!
← →
Karlson © (2005-05-23 20:50) [17]ну так писал же... 1+е:...
← →
Yanis © (2005-05-23 20:52) [18]
> какая разница какой код
Думаю, что большая.
> Оперирую набором действительных чисел в пределах от 0 до 1.
...
> так как оперирую со случайных набором из 600 чисел.
Вот тебе и ноль в знаменателе.
← →
Karlson © (2005-05-23 20:52) [19]To злобная танька
объясните мне, как из 1+е:... может получиться 0.0??
← →
Karlson © (2005-05-23 20:53) [20]To Yanis:
ну откуда?... 1+е^...
← →
Yanis © (2005-05-23 20:54) [21]Хватит уже.
← →
злобная танька (2005-05-23 20:59) [22]даже если не может, тогда баг не в етом и вас дезинформировали. или у них какая-нибудь смешная версия D6. короче без кода ниче вы не добьетесь. всё равно что написали бы
"считаю 1+1 получается 3. ПОЧЕМУ??"
← →
Karlson © (2005-05-23 21:00) [23]To Yanis:
что хватит?...
← →
Styx (2005-05-23 21:00) [24]Не число можно получить и иным способом. Например, sin(2). Поэтому гадать бесполезно.
← →
Karlson © (2005-05-23 21:01) [25]To злобная танька:
Спасибо Вам большое!!!
← →
Styx (2005-05-23 21:05) [26]Я имел в виду arcsin :)
← →
palva © (2005-05-23 21:57) [27]Бывает еще потеря значимости. Когда выполняется вычитание очень маленьких и в то же время очень близких чисел. После вычитания мантисс получается очень маленькое число, при попытке нормализации мантиссы переполняется порядок. Возникает ситуация NaN. Я сталкивался с этим в больших матричных задачах типа ЛП. Теоретически элемент матрицы должен быть нулем, но я его зачем-то вычислял - и вылетал на потерю точности.
Страницы: 1 вся ветка
Текущий архив: 2005.06.06;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.011 c