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

 
 
> Проверка 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
Ответов
MrYuran
сообщение Feb 4 2009, 07:12
Сообщение #2


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

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



Извиняюсь за занудство...
CODE

/* - MATH.H -

The ANSI-defined (+ a few additional) mathematical functions.

$Revision: 1.4 $

Copyright 1986 - 1999 IAR Systems. All rights reserved.
*/

#ifndef _MATH_INCLUDED
#define _MATH_INCLUDED

#ifndef _SYSTEM_BUILD
#pragma system_include
#endif

#include "sysmac.h"

#ifndef HUGE_VAL
#if __FLOAT_SIZE__ == __DOUBLE_SIZE__
#define HUGE_VAL 3.402823466e+38
#else
#define HUGE_VAL 1.7976931348623158e+308
#endif
#endif

/* What is returned if a domain error occurred */
#define __EDOM_VALUE HUGE_VAL

/* PI, PI/2, PI/4, 1/PI, 2/PI */
#define __PI 3.141592653589793238462643
#define __PIO2 1.570796326794896619231
#define __PIO4 .785398163397448309615
#define __INVPI 0.31830988618379067154
#define __TWOOPI 0.63661977236758134308

/* SQRT(2), SQRT(2) + 1, SQRT(2) - 1,SQRT(2) / 2 */
#define __SQRT2 1.4142135623730950488016887
#define __SQ2P1 2.414213562373095048802
#define __SQ2M1 .414213562373095048802
#define __SQRTO2 0.707106781186547524

/* LN(10), TWO-LOG(e), LN(2) e */
#define __LN10 2.302585092994045684
#define __LOG2E 1.4426950408889634073599247
#define __LOG2 0.693147180559945309417232
#define __E 2.718281828459045235360287


#if __IAR_SYSTEMS_ICC__ < 2
#if __TID__ & 0x8000
#pragma function=intrinsic(0)
#endif
#endif

#ifndef MEMORY_ATTRIBUTE
#define MEMORY_ATTRIBUTE
#endif

__INTRINSIC MEMORY_ATTRIBUTE double atan(double);

__INTRINSIC MEMORY_ATTRIBUTE double atan2(double, double);

__INTRINSIC MEMORY_ATTRIBUTE double cos(double);

__INTRINSIC MEMORY_ATTRIBUTE double cosh(double);

__INTRINSIC MEMORY_ATTRIBUTE double fabs(double);

__INTRINSIC MEMORY_ATTRIBUTE double fmod(double, double);

__INTRINSIC MEMORY_ATTRIBUTE double exp(double);

__INTRINSIC MEMORY_ATTRIBUTE double ldexp(double, int);

__INTRINSIC MEMORY_ATTRIBUTE double log(double);

__INTRINSIC MEMORY_ATTRIBUTE double log10(double);

__INTRINSIC MEMORY_ATTRIBUTE double modf(double, double *);

__INTRINSIC MEMORY_ATTRIBUTE double pow(double , double);

__INTRINSIC MEMORY_ATTRIBUTE double sin(double);

__INTRINSIC MEMORY_ATTRIBUTE double sinh(double);

__INTRINSIC MEMORY_ATTRIBUTE double sqrt(double);

__INTRINSIC MEMORY_ATTRIBUTE double tan(double);

__INTRINSIC MEMORY_ATTRIBUTE double tanh(double);

__INTRINSIC MEMORY_ATTRIBUTE double floor(double);

__INTRINSIC MEMORY_ATTRIBUTE double ceil(double);

__INTRINSIC MEMORY_ATTRIBUTE double frexp(double, int *);

__INTRINSIC MEMORY_ATTRIBUTE double acos(double);

__INTRINSIC MEMORY_ATTRIBUTE double asin(double);

#if __IAR_SYSTEMS_ICC__ < 2
#if __TID__ & 0x8000
#pragma function=default
#endif
#endif

#endif /* _MATH_INCLUDED */


Вот так... это ИАР для MSP
чё-то не находит он в math.h isnan(), isfinite() etc...
Может, где-то в другом месте прописано, искать лень...
В общем, всем спасибо и респект, портирование в ближайшие годы не предполагается, MSP rulez (особенно для портативных приложений)
Пока оставляю как есть.
Тем более что в тексте и так полно ручных крякозяблей, типа юниона float с char'ами, с последующей мануальной терапией...
А поскольку проект в целом рабочий и серия насчитывает несколько сотен экз. за 2 года, логично "не лечить то, что работает", просто где явно можно что-то улучшить, слегка подпиливаю.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 4 2009, 07:34
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ Feb 4 2009, 09:12) *
Вот так... это ИАР для MSP
чё-то не находит он в math.h isnan(), isfinite() etc...
У меня аналогичный файл в CLIB от версии 3.21А. Там и stdint.h нет и много еще чего полезного. А в math.h от DLIB - все есть. Так что выберите библиотеку DLIB в настройках проекта - и будет все хорошо.
Причина редактирования: Уменьшение цитаты.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
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
- - shreck   Цитата(MrYuran @ Feb 3 2009, 17:39) Какие...   Feb 3 2009, 11:36
|- - MrYuran   Цитата(shreck @ Feb 3 2009, 14:36) Я поль...   Feb 3 2009, 11:53
|- - 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
- - rezident   Цитата(Сергей Борщ @ Feb 4 2009, 12:34) А...   Feb 4 2009, 15:37


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

 


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


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