Expr表示TCL中的浮点值

Vis*_*ngh 0 tcl

计算浮动值

tclsh
% expr 0.2+0.2
0.4
% expr 0.2+0.1
0.30000000000000004
%
Run Code Online (Sandbox Code Playgroud)

为什么不0.3?

我错过了一些东西.提前致谢.

Don*_*ows 5

0.1或0.2都没有IEEE双精度二进制浮点运算中的精确表示(Tcl在内部用于涉及小数值的表达式,因为它们具有良好的硬件支持).这意味着你与计算值总是恰好是你认为他们是; 相反,它们都是稍微多一点(因为它发生;它们一般也可能略微减少).当添加0.2 +ε 1 + 0.1 +ε 2,可能发生的是ε 12最多可以添加比,其中0.3(另一不精确表示值)变它上面的下一个精确表示所述阈值以上.这是你观察到的.它也是浮点数学在各种语言中工作的固有方式; 只保证整数算术(或能够表示为2的某个幂的精确倍数的分数算术,例如0.5,0.25,0.125).

这里唯一值得注意的事情是Tcl 8.5和8.6更喜欢使用在重新解析时获得精确值所需的最小位数来呈现浮点数.如果您想获得固定的位数(例如,8),请format在转换时使用:

format %.8f [expr 0.2+0.1]
Run Code Online (Sandbox Code Playgroud)