为什么 Tcl 8.4 和 8.5 之间显示的浮点数的表观精度会发生变化?

问题描述 投票:0回答:1

我观察到 tcl8.6.6 的精度值不正确。此行为更改是从 tcl 8.5 开始的。我没有修改过tcl_ precision。在 tcl8.5 和 tcl8.6 中默认为 0

这里是tcl_ precision的参考https://wiki.tcl-lang.org/page/tcl_ precision

根据上面的参考,我期望值是-310.032,而不修改默认的tcl_ precision。

请检查以下表达式。

tclsh8.5
% puts [expr -344.48*0.9]
-310.03200000000004       // Incorrect
% puts [expr -466.9*0.9] 
-420.21  //correct

这是 tcl8.4 的结果

tclsh8.4
% puts [expr -344.48*0.9]
-310.032

我尝试过多个 tcl 版本。 tcl8.4 版本似乎给出了正确的结果。

tclsh8.5

% puts [expr -344.48*0.9]
-310.03200000000004

期望结果与tcl8.4相同

tclsh8.4

% puts [expr -344.48*0.9]
-310.032
floating-point tcl
1个回答
0
投票

虽然我投票决定将其作为重复项关闭,但 8.5 中已经发生了变化。 检查https://wiki.tcl-lang.org/page/tcl_ precision

从 Tcl 8.5 开始,不推荐将 $tcl_ precision 更改为默认值 0 以外的值。如果需要控制浮点值的显示精度,请使用格式(例如format %.12g $x)。

$tcl_ precision 的默认值为 0,这意味着当 Tcl 将数字转换为字符串时,区分浮点数与其最近邻居所需的最少数字。这种行为的优点是像 1.4 这样的不精确数字的字符串表示是 1.4 而不是 1.39999999999999999,允许 Tcl 保持其 EIAS 语义,并为脚本作者提供更直观的表示。

官方文档

© www.soinside.com 2019 - 2024. All rights reserved.