Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
nikita |
4.2.2013, 13:48
Сообщение
#1
|
|
Студент ![]() Группа: Участник Сообщений: 34 Регистрация: 19.10.2012 Пользователь №: 3570 Спасибо сказали: 2 раз(а) Репутация: 0
|
Всем привет! Помогите разобраться : Есть функция которая возвращает значение типа double. На некоторых наборах входных данных она возвращает "nan". Как я понимаю nan = Not A Number. Как проверить является ли значение переменной равным nan? Заранее спасибо!
|
|
|
|
|
Алексей1153 |
4.2.2013, 13:58
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
Link
Цитата NaN не равен ни одному другому значению (даже самому себе[2]); соответственно, самый простой метод проверки результата на NaN — это сравнение полученной величины с самой собой. |
|
|
|
|
nikita |
4.2.2013, 14:06
Сообщение
#3
|
|
Студент ![]() Группа: Участник Сообщений: 34 Регистрация: 19.10.2012 Пользователь №: 3570 Спасибо сказали: 2 раз(а) Репутация: 0
|
Спасибо! Ответ очень помог
|
|
|
|
|
Алексей1153 |
4.2.2013, 14:12
Сообщение
#4
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
кстати, я не проверял, как оптимизатор обойдётся с кодом вида
может, он решит, что isNan всегда == false |
|
|
|
|
Iron Bug |
4.2.2013, 18:12
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12
|
Цитата(Алексей1153 @ 4.2.2013, 17:12) Link может, он решит, что isNan всегда == false теоретически, он может так решить, если переменная не меняется. а если она должна меняться извне - то нужен volatile. |
|
|
|
|
Алексей1153 |
5.2.2013, 13:43
Сообщение
#6
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
думаю, как процедуру оформить можно
|
|
|
|
|
nikita |
5.2.2013, 15:57
Сообщение
#7
|
|
Студент ![]() Группа: Участник Сообщений: 34 Регистрация: 19.10.2012 Пользователь №: 3570 Спасибо сказали: 2 раз(а) Репутация: 0
|
Я оформил так :
Вроде все работает как нужно) |
|
|
|
|
Litkevich Yuriy |
5.2.2013, 17:03
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Алексей1153 @ 4.2.2013, 16:12) Link bool isNan=!(a==a); я бы в жизни не допёр, что сия запись значит! Подумал бы, что это ересь. |
|
|
|
|
Алексей1153 |
5.2.2013, 18:54
Сообщение
#9
|
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
nikita, как сказала Iron Bug, необходимо volatile переменные. Только я их в коде никогда не использовал, но предполагаю, что это должно быть атрибутом аргумента - ведь именно его не нужно оптимизировать. Шаблон не нужен - это всё имеет смысл только для вещественных чисел, а float приведётся к double:
Litkevich Yuriy, ну, выглядит как нагромождение знаков, но там как-то так И! Апофигиоз: у меня НЕ работает (MinGW) - см картинку. Под cl не пробовал |
|
|
|
||
|
Litkevich Yuriy |
5.2.2013, 18:58
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Алексей1153 @ 5.2.2013, 20:54) Link что это должно быть атрибутом аргумента нет, это квалификатор переменной, т.е.: |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 9.1.2026, 4:44 |