找回密码
 立即注册

QQ登录

只需一步,快速开始

新小林

中级会员

83

主题

254

帖子

759

积分

中级会员

积分
759
新小林
中级会员   /  发表于:2021-1-30 20:44  /   查看:2832  /  回复:3
本帖最后由 新小林 于 2021-2-3 15:46 编辑

我原有工程文件太复杂,重新弄了个文件试了下,一样的问题,计算出来是小数点后N位数的一个数字,不知道怎么来的。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

3 个回复

倒序浏览
15725821270悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2021-1-30 21:05:14
来自 2#
本帖最后由 15725821270 于 2021-1-30 21:19 编辑

亲,这不是bug,这个是浮点运算的误差,你可以理解为计算机在二进制转换10进制的过程中产生的一个很微小的误差。可以参考下https://gcdn.grapecity.com.cn/fo ... 5&fromuid=52377

评分

参与人数 1金币 +5 收起 理由
Joe.xu + 5 很给力!

查看全部评分

回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-2-1 10:02:19
板凳
感谢大佬的支持
浮点数的误差的产生一般由于两个原因
1)由于计算机内部以二进制保存,所以十进制的有限位的小数,在计算机内部会是一个无限位的小数。
例如 十进制的0.9虽然只有一位小数,转成2进制是无限循环小数0.1110011001100110011...
2)计算机保存浮点数的精度有限,例如float可以保留十进制最多7位(二进制23位)有效数字,double 可以保留十进制15~16位(二进制52位)有效数字。那有效数字以后的就被忽略了。
例如上面的0.9的表示受精度所限,精度以后的就被忽略了,这样
float时,它是0.89999998
double时,它是0.90000000000000002
回复 使用道具 举报
Erik.Xue讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2021-2-3 14:46:07
地板
感谢楼上的支持!
如果您的问题已解决,请及时更新帖子的状态为“已处理”,并设置最佳答案给有帮助到你的回复;
如果您的问题还未解决,欢迎跟帖补充;
如果您有新的问题,也欢迎创建新的求助帖。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部