реклама на сайте
подробности

 
 
> Проверка float на "численность", как проверить, что float не "nan"?
MrYuran
сообщение Feb 3 2009, 10:39
Сообщение #1


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Сейчас встретил в программе кусок
Код
sprintf(str, "%f", fCNa);
if(isalpha(str[1]))fCNa = 0;

Я так подозреваю, что это проверка fCNa на допустимость
(или как там по-русски сказать)

Если это так, то решение, по-моему, слишком избыточное, учитывая что *printf() нигде больше не используется

Какие могут быть другие способы, менее затратные?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shreck
сообщение Feb 3 2009, 11:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(MrYuran @ Feb 3 2009, 17:39) *
Какие могут быть другие способы, менее затратные?

Я пользуюсь таким кодом:
CODE
//******************************************************************************
// MISC_CPP
// DESCRIPTION:
// Различного рода вспомагательные функции.
//
//
//******************************************************************************

//------------------------------------------------------------------------------
// T Y P E S and D E F I N I T I O N S
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Константa NaN.
const float NaN = 0.0/0.0;

//==============================================================================
// I M P L E M E N T A T I O N
//==============================================================================

//------------------------------------------------------------------------------
// Проверка значения float на число.
bool is_nan(float val)
{
uint32 *pval = reinterpret_cast<uint32*>(&val);
bool result = ((*pval & 0x7F800000) == 0x7F800000) &&
((*pval & 0x007FFFFF) != 0x00000000);
return result;
}

//------------------------------------------------------------------------------
// Проверка значения float на бесконечность.
bool is_inf(float val)
{
uint32 *pval = reinterpret_cast<uint32*>(&val);
bool result = ((*pval & 0x7F800000) == 0x7F800000) &&
((*pval & 0x007FFFFF) == 0x00000000);
return result;
}

//------------------------------------------------------------------------------
// Проверка значения float на корректность. Не Nan и не Inf.
bool is_correct_float(float val)
{
return !(is_nan(val)||is_inf(val));
}
Причина редактирования: Для уменьшения видимого размера цитаты исходника тэги code заменены на codebox.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 3 2009, 11:53
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(shreck @ Feb 3 2009, 14:36) *
Я пользуюсь таким кодом:
...
uint32 *pval = reinterpret_cast<uint32*>(&val);
...

Спасибо, а вот это
reinterpret_cast<uint32*> - на каком языке написано?
я так подозреваю, на си это что-то типа (uint32*)?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MrYuran   Проверка float на "численность"   Feb 3 2009, 10:39
- - Палыч   Цитата(MrYuran @ Feb 3 2009, 13:39) Какие...   Feb 3 2009, 11:24
|- - vik0   Цитата(MrYuran @ Feb 3 2009, 13:53) reint...   Feb 3 2009, 12:14
|- - Сергей Борщ   Цитата(vik0 @ Feb 3 2009, 14:14) Все уже ...   Feb 3 2009, 12:50
|- - vik0   Цитата(Сергей Борщ @ Feb 3 2009, 14:50) ...   Feb 3 2009, 13:04
|- - Сергей Борщ   Цитата(vik0 @ Feb 3 2009, 15:04) А как бы...   Feb 3 2009, 13:46
|- - vik0   Цитата(Сергей Борщ @ Feb 3 2009, 15:46) i...   Feb 3 2009, 13:55
|- - shreck   Цитата(Сергей Борщ @ Feb 3 2009, 20:46) О...   Feb 4 2009, 03:40
|- - Палыч   Цитата(shreck @ Feb 4 2009, 06:40) ... по...   Feb 4 2009, 06:36
|- - Сергей Борщ   Цитата(shreck @ Feb 4 2009, 05:40) 1. Не ...   Feb 4 2009, 06:46
- - MrYuran   В общем, всем спасибо, сделал misc.c как у shreсk...   Feb 3 2009, 13:30
- - aaarrr   По-моему, правильно будет использовать isfinite():...   Feb 3 2009, 13:49
|- - Сергей Борщ   Цитата(aaarrr @ Feb 3 2009, 15:49) По-мое...   Feb 3 2009, 13:51
- - MrYuran   Извиняюсь за занудство... CODE /* ...   Feb 4 2009, 07:12
- - Сергей Борщ   Цитата(MrYuran @ Feb 4 2009, 09:12) Вот т...   Feb 4 2009, 07:34
- - rezident   Цитата(Сергей Борщ @ Feb 4 2009, 12:34) А...   Feb 4 2009, 15:37


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 20:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016