递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 6992|回复: 17
打印 上一主题 下一主题

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

[复制链接]

42

主题

244

帖子

2067

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2067
跳转到指定楼层
楼主
发表于 2022-8-11 14:50:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sunye88888 于 2022-8-11 14:58 编辑

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








回复

使用道具 举报

42

主题

244

帖子

2067

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2067
沙发
 楼主| 发表于 2022-8-11 14:51:54 | 只看该作者
用不用加密狗.结果一样
回复

使用道具 举报

23

主题

254

帖子

1443

积分

金牌会员

Rank: 6Rank: 6

积分
1443
板凳
发表于 2022-8-11 15:07:45 | 只看该作者
由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大,不能用浮点型数据直接和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
回复

使用道具 举报

42

主题

244

帖子

2067

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2067
地板
 楼主| 发表于 2022-8-11 15:11:00 | 只看该作者
zhqyong 发表于 2022-8-11 15:07
由于浮点型数据在计算机中的表示方式与其余数据结构相差巨大,不能用浮点型数据直接和0用>=,= -ACCU)&&(x  ...

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

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

使用道具 举报

23

主题

254

帖子

1443

积分

金牌会员

Rank: 6Rank: 6

积分
1443
5#
发表于 2022-8-11 15:12:04 | 只看该作者
本帖最后由 zhqyong 于 2022-8-11 15:33 编辑

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


回复

使用道具 举报

42

主题

244

帖子

2067

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2067
6#
 楼主| 发表于 2022-8-11 15:17:11 | 只看该作者
zhqyong 发表于 2022-8-11 15:12
火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。

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

使用道具 举报

23

主题

254

帖子

1443

积分

金牌会员

Rank: 6Rank: 6

积分
1443
7#
发表于 2022-8-11 15:20:34 | 只看该作者
sunye88888 发表于 2022-8-11 15:17
数值到格式文本输出 的数据不对是什么原因呢?

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

使用道具 举报

42

主题

244

帖子

2067

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2067
8#
 楼主| 发表于 2022-8-11 15:22:37 | 只看该作者
本帖最后由 sunye88888 于 2022-8-11 15:30 编辑
zhqyong 发表于 2022-8-11 15:12
火山的小数是双精度的,所以不要用与0直接比较,解决方法参考上面。

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

456.jpg (180.53 KB, 下载次数: 61)

456.jpg
回复

使用道具 举报

23

主题

254

帖子

1443

积分

金牌会员

Rank: 6Rank: 6

积分
1443
9#
发表于 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
回复

使用道具 举报

42

主题

244

帖子

2067

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2067
10#
 楼主| 发表于 2022-8-11 15:36:08 | 只看该作者
zhqyong 发表于 2022-8-11 15:31
结果是正确的啊!!!!!!!!!
如果(x0.000000000000001)//判断不等于0
如果(x>=-0.00000000000000 ...

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

这些知识太专业,小白不知道哇
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 21:51 , Processed in 0.095824 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表