Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Результат NaN [D6, WinXP]


Страницы:   1 2

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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо