![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Результат NaN [D6, WinXP]
Karlson © (2005-05-23 18:29:00)Добрый день. Оперирую набором действительных чисел в пределах от 0 до 1. Над ними выполняю различные операции, такие как умножение, сложение, вычисление определенных функций. В некоторых случаях результатом есть NaN. С чем это связано? И что может быть причиной, как устранить? Логики в появлении такого результата уловить не могу, так как оперирую со случайных набором из 600 чисел.
Заранее спасибо.
palva (2005-05-23 21:57:00) [1]Бывает еще потеря значимости. Когда выполняется вычитание очень маленьких и в то же время очень близких чисел. После вычитания мантисс получается очень маленькое число, при попытке нормализации мантиссы переполняется порядок. Возникает ситуация NaN. Я сталкивался с этим в больших матричных задачах типа ЛП. Теоретически элемент матрицы должен быть нулем, но я его зачем-то вычислял - и вылетал на потерю точности.
Styx (2005-05-23 21:05:00) [2]Я имел в виду arcsin :)
Karlson (2005-05-23 21:01:00) [3]To злобная танька:
Спасибо Вам большое!!!
Styx (2005-05-23 21:00:00) [4]Не число можно получить и иным способом. Например, sin(2). Поэтому гадать бесполезно.
Karlson (2005-05-23 21:00:00) [5]To Yanis:
что хватит?...
злобная танька (2005-05-23 20:59:00) [6]даже если не может, тогда баг не в етом и вас дезинформировали. или у них какая-нибудь смешная версия D6. короче без кода ниче вы не добьетесь. всё равно что написали бы
"считаю 1+1 получается 3. ПОЧЕМУ??"
Yanis (2005-05-23 20:54:00) [7]Хватит уже.
Karlson (2005-05-23 20:53:00) [8]To Yanis:
ну откуда?... 1+е^...
Karlson (2005-05-23 20:52:00) [9]To злобная танька
объясните мне, как из 1+е:... может получиться 0.0??
Yanis (2005-05-23 20:52:00) [10]
> какая разница какой код
Думаю, что большая.
> Оперирую набором действительных чисел в пределах от 0 до 1.
...
> так как оперирую со случайных набором из 600 чисел.
Вот тебе и ноль в знаменателе.
Karlson (2005-05-23 20:50:00) [11]ну так писал же... 1+е:...
злобная танька (2005-05-23 20:49:00) [12]если результат выражения - NaN, как можно вместо него вернуть число? NaN это даже не бесконечность, это вообще нифига.
а отчиво возникает - вам уже написали: 0.0 / 0.0
ето можно было и в хелпе написать.
короче ловите NaN и возвращяйте вместо него какое-нибудь прикольное число по рандому например!
Просто Джо (2005-05-23 20:47:00) [13]
> в знаменателе "все красиво"...
Ну, так хоть пример красивых знаменателей
Karlson (2005-05-23 20:43:00) [14]не могу... меня попросили выяснить. а кода не давали... просто отчего возникает такая ошибка и как все-таки вернуть число, а не Нан... какая разница какой код... если в знаменателе "все красиво"...
Yanis (2005-05-23 20:39:00) [15]2 [12]
Выложи здесь код, который по твоему предположению "не работает". Тогда дельных советов больше будет (может быть).
Karlson (2005-05-23 20:31:00) [16]To Yanis
дельное бы чего посоветовал...
Yanis (2005-05-23 20:27:00) [17]
> А если меня "нифига" не устраивает... у меня же нет деления на
> ноль... я не понимаю почему оно появляется...
В таком случае см. [1], [4]
Karlson (2005-05-23 20:20:00) [18]А если меня "нифига" не устраивает... у меня же нет деления на ноль... я не понимаю почему оно появляется...
злобная танька (2005-05-23 20:15:00) [19]ну я имею ввиду что наверно это будет работать быстрее чем через try..except, как предлагалось выше.
т.е. пишем
if not IsNan(a/b) then c := a/b else showmessage('нифига!');
Marser (2005-05-23 20:13:00) [20]
> 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.