crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Правильно сравнить и поймать некорректное значение, acos, cos, sin
AD
  опции профиля:
сообщение 22.4.2008, 11:40
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Как правильно отловить значение double-переменной, равное indefinite? Т.е. неправильное значение как отловить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 22.4.2008, 14:47
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Цитата(AD @ 22.4.2008, 12:40) *
Как правильно отловить значение double-переменной, равное indefinite? Т.е. неправильное значение как отловить?


IMHO лучше проверить аргумент перед тем как отправлять его в функцию, но если ты хочешь именно отловить ошибку, посмотри в сторону matherr:
http://docs.hp.com/cgi-bin/doc3k/B3002690004.12349/127
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 22.4.2008, 15:02
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Andrew Selivanov @ 22.4.2008, 15:47) *
Цитата(AD @ 22.4.2008, 12:40) *
Как правильно отловить значение double-переменной, равное indefinite? Т.е. неправильное значение как отловить?


IMHO лучше проверить аргумент перед тем как отправлять его в функцию, но если ты хочешь именно отловить ошибку, посмотри в сторону matherr:
http://docs.hp.com/cgi-bin/doc3k/B3002690004.12349/127

Спасибо, но я уже нашел: функция _isnan(double number)!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 22.4.2008, 16:35
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Цитата(AD @ 22.4.2008, 16:02) *
Цитата(Andrew Selivanov @ 22.4.2008, 15:47) *
Цитата(AD @ 22.4.2008, 12:40) *
Как правильно отловить значение double-переменной, равное indefinite? Т.е. неправильное значение как отловить?


IMHO лучше проверить аргумент перед тем как отправлять его в функцию, но если ты хочешь именно отловить ошибку, посмотри в сторону matherr:
http://docs.hp.com/cgi-bin/doc3k/B3002690004.12349/127

Спасибо, но я уже нашел: функция _isnan(double number)!


Прикольно, я вначале не понял, что имелось ввиду :)
Я о такой функции не знал, но поинтересовался и вот что написано в хидере math.h по этому поводу (#define isnan вызывает нужную версию __isnan):
/* 7.12.3.4 */
/* We don't need to worry about trucation here:
   A NaN stays a NaN. */

__CRT_INLINE int __cdecl __isnan (double _x)
{
  unsigned short sw;
  __asm__ ("fxam;"
       "fstsw %%ax": "=a" (sw) : "t" (_x));
  return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
    == FP_NAN;
}


Малось подзабыл, что тут что значит, но откопал неплохой мануал: http://www.website.masmforum.com/tutorials...uchap7.htm#fxam
Вообще говоря, таким хаком мы можем посмотреть не только NaN, но и Normal, Infinity итп.

Цитата
Content of ST(0) C3 C2 C0
Unsupported 0 0 0
NAN 0 0 1
Normal finite number 0 1 0
Infinity 0 1 1
Zero 1 0 0
Empty 1 0 1
Denormalized number 1 1 0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 18:45