明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 595|回复: 5

[讨论] rtos有bug?

[复制链接]
发表于 2023-6-6 10:22 | 显示全部楼层 |阅读模式
   (rtos 1.012345678901234567890123456789 2 14)
     ==>"1.012345678901234"

   (rtos 1.012345678901234567890123456789 2 15)
     ==>"1.012345678901235"  这个为什么不一样??

   (rtos 1.012345678901234567890123456789 2 16)
     ==>"1.012345678901234"

   (rtos 1.012345678901234567890123456789 2 30)
     ==>"1.012345678901234"


发表于 2023-6-6 11:04 | 显示全部楼层
本帖最后由 1291500406 于 2023-6-6 11:06 编辑

命令: (rtos 1.012345678901234567890123456789 2 15)
"1.012345678901235"
命令: (rtos 1.012345678901234567890123456789 2 14)
"1.01234567890124"
命令: (rtos 1.012345678901234567890123456789 2 16)
"1.012345678901234"
命令: (rtos 1.012345678901234567890123456789 2 30)
"1.012345678901234"
发表于 2023-6-6 11:20 | 显示全部楼层
浮点数的精度问题
发表于 2023-6-6 15:41 | 显示全部楼层
baitang36 发表于 2023-6-6 11:20
浮点数的精度问题

这个正常啊,最后一位都是不可信的
发表于 2023-6-6 16:41 | 显示全部楼层
本帖最后由 tryhi 于 2023-6-6 16:51 编辑

1.012345678901234567890123456789
其实这个数只存在于源码中,实际CAD内存里面保存不了这么长的数。
不是BUG,而是双精度浮点数的特性,为什么取15比取16大,我猜测是因为15刚刚处于最后一位跟半位之间,其半位取整后为5,此时15进位,而16退位是因为不取整小于5,所以16退位,这里要用小数二进制的转换方式去思考。

在二进制中,像0.05这样的小数无法精确表示为有限位数的二进制。类似于0.4,0.05也是一个无限循环的二进制小数。
当我们试图将0.05转换为二进制时,我们会得到以下表示:
0.05(十进制)= 0.000011000010111...(二进制)
在这个二进制表示中,数字序列 "000011000010111" 会一直重复下去。因此,0.05无法以有限位数的二进制精确表示。
在计算机中,0.05通常会近似表示为一个接近0.05的二进制近似值,而不是精确值。这是因为浮点数的表示有限,无法精确表示所有的小数。


同样的情况可以引申到浮点数计算误差的问题http://bbs.mjtd.com/thread-170066-1-1.html
发表于 2023-6-6 17:11 | 显示全部楼层
本帖最后由 liweihua-1984 于 2023-6-6 17:13 编辑

奇进偶不进
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-1 03:46 , Processed in 0.267380 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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