火山pc小数错误?? 是代码问题 还是 严重BUG????
本帖最后由 sunye88888 于 2022-8-11 14:58 编辑问题有2个,这个不知道是我代码问题,还是存在 BUG? 如果有这样的BUG,对于软件来说数据计算转换应该是最基础的东西,这个BUG 是不是太严重了呢?
图片中
1. 调试输出 是0 ,结果执行了不为0 的如果语句
2.数值到格式文本输出的结果问题
用不用加密狗.结果一样 由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大,不能用浮点型数据直接和0用>=,<=来比较。
因为float的精度是6位,即精确到小数点后第五位,所以应该使用其精确位0.00001;同理双精度小数其精度为15位,精确到小数点后第14位。
所以float型数据与0的比较程序如下:
#defineACCU 0.00001
if((x >= -ACCU)&&(x <= ACCU)
此为判断的if语句。
或用浮点的绝对值比较if(abs(x)<=ACCU)
————————————————
版权声明:本文为CSDN博主「CrazyAsk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/CrazyAsk/article/details/8232972 zhqyong 发表于 2022-8-11 15:07
由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大,不能用浮点型数据直接和0用>=,= -ACCU)&&(x...
第一个 请问火山中比较的正确的写法,
第二个 请问是什么原因呢? 本帖最后由 zhqyong 于 2022-8-11 15:33 编辑
火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。
试试:如果(x<-0.000000000000001 || x>0.000000000000001)//判断不等于0
zhqyong 发表于 2022-8-11 15:12
火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。
数值到格式文本输出 的数据不对是什么原因呢? sunye88888 发表于 2022-8-11 15:17
数值到格式文本输出 的数据不对是什么原因呢?
由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大 本帖最后由 sunye88888 于 2022-8-11 15:30 编辑
zhqyong 发表于 2022-8-11 15:12
火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。
更改后问题1 有所解决,
问题2没有办法么?
sunye88888 发表于 2022-8-11 15:22
更改后问题1 有所解决,
问题2没有办法么?
结果是正确的啊!!!!!!!!!
如果(x<-0.000000000000001 || x>0.000000000000001)//判断不等于0
如果(x>=-0.000000000000001 && x<=0.000000000000001)//等于0
zhqyong 发表于 2022-8-11 15:31
结果是正确的啊!!!!!!!!!
如果(x0.000000000000001)//判断不等于0
如果(x>=-0.00000000000000 ...
感谢 ,请问 数值到格式文本 那里 怎样解决呢?
这些知识太专业,小白不知道哇
页:
[1]
2