tcl/python 中的浮点加法/减法

Floating point addition/subtraction in tcl/python

提问人:kil47 提问时间:2/23/2023 更新时间:2/23/2023 访问量:48

问:

我正在尝试对数字进行减法

在 TCL 或 Python 中:= 201.804600000000002expr { 202.2246-0.42}

理想情况下,答案应该是 201.8046

解决它的一种方法是将其转换为整数并进行减法并将其转换回来,但十进制数字的编号不是固定的,我不希望将其乘以 10^9(int 限制) - 也许作为最后的手段。

精度非常重要。 为什么结果与确切结果不同?我怎样才能以一种通用的方式控制它 - 不仅针对这些操作数?

python-3.x 减法 浮点精度 tcltk

评论

2赞 Eric Postpischil 2/23/2023
大多数 Python 实现使用 IEEE-754 binary64 格式进行浮点运算。该格式通过将整数缩放为 2 的幂来表示数字。202.2246 和 .42 不能以该格式表示。最接近的可表示值为 202.22460000000000945874489843845367431640625 和 0.4199999999999999984456877655247808434069156646728515625。因此,舍入误差甚至在执行减法之前就发生了;当数字转换为 binary64 时,它们会出现。您不能以浮点格式“控制”它;它是格式固有的......
1赞 Eric Postpischil 2/23/2023
...可以从浮点结果中确定实数算术或十进制结果将被赋予已知的限制,即涉及多少位数(小数点的左边和右边,或总数)以及执行多少和哪些算术运算。对于简单情况,只需四舍五入到已知位数即可完成。
0赞 kil47 2/23/2023
这可能有效..四舍五入到最接近的尾数 - 小数点后的最大位数 - 操作后。我试一试......谢谢提示
0赞 kil47 2/27/2023
谢谢!这确实奏效了.我将结束这个话题。您能否也告诉我图书馆如何可视化浮点数的全部值 - 202.2246 = 02.22460000000000945874489843845367431640625

答: 暂无答案