火山软件开发平台

标题: 火山pc小数错误?? 是代码问题 还是 严重BUG???? [打印本页]

作者: sunye88888    时间: 2022-8-11 14:50
标题: 火山pc小数错误?? 是代码问题 还是 严重BUG????
本帖最后由 sunye88888 于 2022-8-11 14:58 编辑

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

(, 下载次数: 27)







作者: sunye88888    时间: 2022-8-11 14:51
用不用加密狗.结果一样
作者: zhqyong    时间: 2022-8-11 15:07
由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大,不能用浮点型数据直接和0用>=,<=来比较。

因为float的精度是6位,即精确到小数点后第五位,所以应该使用其精确位0.00001;同理双精度小数其精度为15位,精确到小数点后第14位。

所以float型数据与0的比较程序如下:

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

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

第二个 请问是什么原因呢?
作者: zhqyong    时间: 2022-8-11 15:12
本帖最后由 zhqyong 于 2022-8-11 15:33 编辑

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



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

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

由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大
作者: sunye88888    时间: 2022-8-11 15:22
本帖最后由 sunye88888 于 2022-8-11 15:30 编辑
zhqyong 发表于 2022-8-11 15:12
火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。

更改后问题1 有所解决,
问题2  没有办法么?

作者: zhqyong    时间: 2022-8-11 15:31
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
zhqyong 发表于 2022-8-11 15:31
结果是正确的啊!!!!!!!!!
如果(x0.000000000000001)//判断不等于0
如果(x>=-0.00000000000000 ...

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

这些知识太专业,小白不知道哇
作者: sunye88888    时间: 2022-8-11 15:40
zhqyong 发表于 2022-8-11 15:31
结果是正确的啊!!!!!!!!!
如果(x0.000000000000001)//判断不等于0
如果(x>=-0.00000000000000 ...

等于0的时候 数值到格式文本就不用了 直接指定0好了 谢谢您
作者: edu    时间: 2022-8-11 15:57
把变量强转至整数就好了吧
作者: 创世魂    时间: 2022-8-11 16:15
把  (整数)局部_数据3  强制转换为整数在和0比较。
作者: sunye88888    时间: 2022-8-11 16:31
创世魂 发表于 2022-8-11 16:15
把  (整数)局部_数据3  强制转换为整数在和0比较。

谢谢 已经解决了  ,感谢
作者: 福寿    时间: 2022-8-11 17:22
本帖最后由 福寿 于 2022-8-11 17:23 编辑

火山的小数是双浮点,双浮点精度为15位,而这个余数在第16位才有值,不是搞导/弹研究的话实际上用到第2位就已经很精确了,完全不用去研究这个,就算是圆周率也只计算到3.14就足够了

作者: sunye88888    时间: 2022-8-12 14:43
福寿 发表于 2022-8-11 17:22
火山的小数是双浮点,双浮点精度为15位,而这个余数在第16位才有值,不是搞导/弹研究的话实际上用到第2位就 ...

感谢指点 问题已经解决了 谢谢
作者: 飞扬工作室    时间: 2022-8-12 15:17
这个有现成封装好的命令: "小数是否为零", "小数是否相等"
作者: sunye88888    时间: 2022-8-13 16:37
飞扬工作室 发表于 2022-8-12 15:17
这个有现成封装好的命令: "小数是否为零", "小数是否相等"

谢谢 是我基础知识太差 感谢大家的帮助




欢迎光临 火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4