rtos有bug?
(rtos 1.012345678901234567890123456789 2 14)==>"1.012345678901234"
(rtos 1.012345678901234567890123456789 2 15)
==>"1.012345678901235":L这个为什么不一样??
(rtos 1.012345678901234567890123456789 2 16)
==>"1.012345678901234"
(rtos 1.012345678901234567890123456789 2 30)
==>"1.012345678901234"
本帖最后由 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"
浮点数的精度问题 baitang36 发表于 2023-6-6 11:20
浮点数的精度问题
这个正常啊,最后一位都是不可信的 本帖最后由 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
本帖最后由 liweihua-1984 于 2023-6-6 17:13 编辑
奇进偶不进
页:
[1]