注释
最大的问题是使用 decimal 会慢很多。我还猜测许多具有高效 CPU 浮点指令(sin、sqrt 等)的函数将具有较慢的 CPU 对应项。 |
文件 1.py:
sfinexer@sfinexer:~/$ python 1.py 测试 1e11 的准确性 |
只要你不需要乘以结果。您需要了解,当您一次又一次地进行数学运算时,错误会累积。 目前 bCNC 生成小数点后 6 位的 g 代码,当我们尝试使用更多时会遇到问题。对于我和我的机器来说,如此精确是没有意义的。但是 bCNC 的代码必须解决一些基于精度的问题。例如。你不能直接比较两点来判断它们是否相同。您必须检查它们之间的距离是否小于 1e-7mm …(有时这可能有意义。有时没那么多) |
@sfinexer BCNC/lib/bpath.py |
我会说你一般不能依赖浮点数的相等比较。此外,双精度通常足够准确。(约 15 位数字)。 |
如果准确率更高,那么你也会比较两个数字。 |
@Harvie我想我明白你的意思了。 |
从我读到的内容来看: |
我刚刚听说过 python decimal https://docs.python.org/2/library/decimal.html
人们说它比 float 更适合精确的十进制计算,因为它不会做任何带有最小小数位的奇怪事情. 这可以帮助我们解决 bCNC 现在具有精度的 1e-7 问题,因为使用十进制类型你可以设置你想要的任何小数精度(小数位数没有限制,但你必须在开始计算之前说明它) . 但我不是 python 专家,也不是浮点魔术师。所以我想听听更多有经验的人对这个话题的看法。
这只是一个非常遥远的未来的想法。
有趣的话题:
https ://sixty-north.com/blog/the-folly-of-floating-point-for-robust-geometric-computation.html
https://www.itu.dk/~setoft/bachelor/IEEE754_article .pdf
https://www.youtube.com/watch?v=PZRI1IfStY0