Russian Qt Forum
Ноябрь 25, 2024, 03:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Полезная строка/inline  (Прочитано 18444 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #15 : Август 11, 2009, 11:50 »

проверка на -0 штоле?
Можно по подробнее.

http://ru.wikipedia.org/wiki/Машинный_ноль
Записан
Tonal
Гость
« Ответ #16 : Август 11, 2009, 12:07 »

2 Spectre Учи матчасть: Nan
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Август 11, 2009, 13:15 »

Можно по подробнее.
Можно. Пример

double a = sqrt(-1.0);
if (!(a >= 0) && !(a < 0))
    printf("a is invalid");

Условие возвращает true и printf выполняется. На практике это удобный способ проверить "живы ли еще расчеты" (или уже молотим Nan'ы).

Ну а насчет "приколов" - стар я уже чтобы глупыми шутками заниматься  Улыбающийся
Записан
spectre71
Гость
« Ответ #18 : Август 11, 2009, 13:40 »

2 Spectre Учи матчасть: Nan
Век живи век учись. Никогда этим не пользовался и соответственно не знал.
Получается что double(float) не являются упорядоченным множеством Улыбающийся
Записан
Rcus
Гость
« Ответ #19 : Август 11, 2009, 13:56 »

Условие возвращает true и printf выполняется. На практике это удобный способ проверить "живы ли еще расчеты" (или уже молотим Nan'ы).
Я не слишком знаком с экзотическими платформами, но разве isnan из cmath/math.h не тоже самое делает?
Записан
spectre71
Гость
« Ответ #20 : Август 11, 2009, 14:00 »

Условие возвращает true и printf выполняется. На практике это удобный способ проверить "живы ли еще расчеты" (или уже молотим Nan'ы).
Я не слишком знаком с экзотическими платформами, но разве isnan из cmath/math.h не тоже самое делает?
Видимо приведенный метод более оптимален.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #21 : Август 11, 2009, 14:44 »

2 Spectre Учи матчасть: Nan

А к чему такие сложности? Можно же сравнить a != a?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Август 11, 2009, 15:34 »

Я не слишком знаком с экзотическими платформами, но разве isnan из cmath/math.h не тоже самое делает?

Я так и делал пока не увидел эту строку  Улыбающийся Но этого было недостаточно, нужно вызывать fpclassify и проверять варианты. Да еще на др. компиляторе _fpclass (а не fpclassify). В итоге получалось длинно и мутно.

А к чему такие сложности? Можно же сравнить a != a?

Можно, но так мы провоцируем оптимизатор кода. лучше таких приключений не искать.
Записан
spectre71
Гость
« Ответ #23 : Август 11, 2009, 16:22 »

А к чему такие сложности? Можно же сравнить a != a?

Можно, но так мы провоцируем оптимизатор кода. лучше таких приключений не искать.

Не факт, что какой-нибудь оптимизатор кода не схлопнет (!(a >= 0) && !(a < 0)) до false.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #24 : Август 11, 2009, 16:40 »

Не факт, что какой-нибудь оптимизатор кода не схлопнет (!(a >= 0) && !(a < 0)) до false.

Насколько я замечал, даже абсурдные сравнения в оптимизированном коде выполняются. Но вот как сравнивать - вариантов много. Например если "а" float  то для (a != a) вполне могут быть использованы целочисленные 4-байтные регистры (вместо FP). А в общем согласен, конечно - не факт.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.194 секунд. Запросов: 22.