设为首页收藏本站帮助中心
查看: 326|回复: 0
收起左侧

C51/STC单片机检测 double/float 类型32位IEEE754格式编码浮点小数 / 是否运算正确()

[复制链接]
发表于 2022-8-14 10:12:33 | 显示全部楼层 |阅读模式
1.png
  1. /*
  2. 单片机型号:C51内核/STC任意 晶振频率:任意
  3. */
  4. #include "reg51.h"
  5. sbit led0 = P1 ^ 0;
  6. sbit led1 = P1 ^ 1;
  7. sbit led2 = P1 ^ 2;
  8. sbit led3 = P1 ^ 3;
  9. sbit led4 = P1 ^ 4;
  10. sbit led5 = P1 ^ 5;
  11. sbit led6 = P1 ^ 6;
  12. sbit led7 = P1 ^ 7;

  13. /*
  14. 判断32位IEEE754格式浮点小数数据、易语言的 是否运算正确()
  15. 数值正确返回1、运算错误、溢出、INF、NAN返回0
  16. */
  17. bit IsCalcOK(float val){
  18.         union u{
  19.                 float f;
  20.                 unsigned long l;
  21.         } i;
  22.         i.f = val;
  23.         if((i.l & 0x7F800000) == 0x7F800000){                //大端 (8位指数位全部为1)
  24.                 return 0;
  25.         }
  26.         return 1;
  27. }

  28. void main(){
  29.         led0 = !IsCalcOK(0);
  30.         led1 = !IsCalcOK(3.1415926);
  31.         led2 = !IsCalcOK(-3.1415926);
  32.         led3 = !IsCalcOK(1e+50);                        //溢出
  33.         led4 = !IsCalcOK(-1e+50);                        //溢出
  34.         led5 = !IsCalcOK(1e+10);
  35.         led6 = !IsCalcOK(-1e+10);
  36.         led7 = !IsCalcOK(1234567890);

  37.         while(1);
  38. }
复制代码

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则