sunye88888 发表于 2022-8-11 14:50:34

火山pc小数错误?? 是代码问题 还是 严重BUG????

本帖最后由 sunye88888 于 2022-8-11 14:58 编辑

问题有2个,这个不知道是我代码问题,还是存在 BUG? 如果有这样的BUG,对于软件来说数据计算转换应该是最基础的东西,这个BUG 是不是太严重了呢?
图片中
1.   调试输出 是0 ,结果执行了不为0 的如果语句
2.数值到格式文本输出的结果问题








sunye88888 发表于 2022-8-11 14:51:54

用不用加密狗.结果一样

zhqyong 发表于 2022-8-11 15:07:45

由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大,不能用浮点型数据直接和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

sunye88888 发表于 2022-8-11 15:11:00

zhqyong 发表于 2022-8-11 15:07
由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大,不能用浮点型数据直接和0用>=,= -ACCU)&&(x...

第一个 请问火山中比较的正确的写法,

第二个 请问是什么原因呢?

zhqyong 发表于 2022-8-11 15:12:04

本帖最后由 zhqyong 于 2022-8-11 15:33 编辑

火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。
试试:如果(x<-0.000000000000001 || x>0.000000000000001)//判断不等于0


sunye88888 发表于 2022-8-11 15:17:11

zhqyong 发表于 2022-8-11 15:12
火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。

数值到格式文本输出 的数据不对是什么原因呢?

zhqyong 发表于 2022-8-11 15:20:34

sunye88888 发表于 2022-8-11 15:17
数值到格式文本输出 的数据不对是什么原因呢?

由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大

sunye88888 发表于 2022-8-11 15:22:37

本帖最后由 sunye88888 于 2022-8-11 15:30 编辑

zhqyong 发表于 2022-8-11 15:12
火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。
更改后问题1 有所解决,
问题2没有办法么?

zhqyong 发表于 2022-8-11 15:31:59

sunye88888 发表于 2022-8-11 15:22
更改后问题1 有所解决,
问题2没有办法么?
结果是正确的啊!!!!!!!!!
如果(x<-0.000000000000001 || x>0.000000000000001)//判断不等于0
如果(x>=-0.000000000000001 && x<=0.000000000000001)//等于0

sunye88888 发表于 2022-8-11 15:36:08

zhqyong 发表于 2022-8-11 15:31
结果是正确的啊!!!!!!!!!
如果(x0.000000000000001)//判断不等于0
如果(x>=-0.00000000000000 ...

感谢 ,请问 数值到格式文本 那里 怎样解决呢?

这些知识太专业,小白不知道哇
页: [1] 2
查看完整版本: 火山pc小数错误?? 是代码问题 还是 严重BUG????