Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.024 c
14-1116587533
Lexer
2005-05-20 15:12
2005.06.06
Как прочесть xml?


3-1114504248
vitge
2005-04-26 12:30
2005.06.06
Установка Базы даных с использованием БДЕ


5-1086685262
ancara
2004-06-08 13:01
2005.06.06
Вставка компонента из буфера


1-1116704671
violla
2005-05-21 23:44
2005.06.06
Проблема с MDI окнами!


8-1108810484
avlan
2005-02-19 13:54
2005.06.06
Инструмент "Спрей"