C51/STC单片机检测 double/float 类型32位IEEE754格式编码浮点小数 / 是否运算正确()
/*
单片机型号:C51内核/STC任意 晶振频率:任意
*/
#include "reg51.h"
sbit led0 = P1 ^ 0;
sbit led1 = P1 ^ 1;
sbit led2 = P1 ^ 2;
sbit led3 = P1 ^ 3;
sbit led4 = P1 ^ 4;
sbit led5 = P1 ^ 5;
sbit led6 = P1 ^ 6;
sbit led7 = P1 ^ 7;
/*
判断32位IEEE754格式浮点小数数据、易语言的 是否运算正确()
数值正确返回1、运算错误、溢出、INF、NAN返回0
*/
bit IsCalcOK(float val){
union u{
float f;
unsigned long l;
} i;
i.f = val;
if((i.l & 0x7F800000) == 0x7F800000){ //大端 (8位指数位全部为1)
return 0;
}
return 1;
}
void main(){
led0 = !IsCalcOK(0);
led1 = !IsCalcOK(3.1415926);
led2 = !IsCalcOK(-3.1415926);
led3 = !IsCalcOK(1e+50); //溢出
led4 = !IsCalcOK(-1e+50); //溢出
led5 = !IsCalcOK(1e+10);
led6 = !IsCalcOK(-1e+10);
led7 = !IsCalcOK(1234567890);
while(1);
}
页:
[1]