我不我的日常工作中使用的Tcl。但是,我有一个同事谁偶尔与谁愿我们的工具的扩展语言的工作更像是Tcl的客户交互(!)。他提出了一个话题是如何的Tcl让他设置精度差不多是如何的存储的在双,通过一个全局变量,tcl_precision。

我做了一些网络搜索,我发现的文件肯定似乎表明,是这种情况(而不是仅仅设置打印精度)。但是,它看起来好像tcl_precision已经有一个曲折的历史。我得到的印象是,它是为一个版本或两个完全取出,然后放回去,但有关覆盖缺省值为0,这实际上意味着17(这本手册的承诺足以表示任何IEEE警告和啧啧TUTS 754双)。

因此,谁能告诉我更多地了解tcl_precision的真正的承诺做的,它有下的,盖双打什么样的影响?难道仅仅是一个全局设置的打印的数字呢,还是事实上的的作为存储数字的精度(这似乎危险的我)?

有帮助吗?

解决方案

其他的答案是正确的,tcl_precision控制浮 - >串的转换。

但真正的问题(你不应该惹tcl_precision的原因)是TCL的 EIAS 哲学使得它有可能是这种转换不是在显示只是完成,即你可以建立一个字符串表达式,然后EXPR,或在一个字符串EVAL建立一个脚本。单独留下tcl_precicion意味着转换为字符串是可逆式,这是在这些情况下,显然是重要的。

话虽如此,如果你的客户是依靠改变tcl_presicion改变计算,他们可能真的不知道自己在做什么。你可能想看看如果你能找出他们真正想要做的更多细节。

其他提示

我不认为你的客户是在他的理解是正确的。

我相信tcl_precision变量允许您设置TCL将显示,当将一个实为一个字符串的显著数字的数量,你的建议。

默认设置为6:

expr 1.11111111 + 1.11111111
=> 2.22222

如果您将它设置为10,你会得到:

set tcl_precision 10
expr 1.11111111 + 1.11111111
=> 2.22222222

它不会影响实际的方法的Tcl用来在内部表示的实数,这是记录为一个C型双,提供的精度约15个十进制数字。

在Tcl的8.5,该tcl_precision全局变量应(可能)被留以及单独地,作为默认设置使用的最小位数表示有关IEEE双准确。这不是一样用数字固定数量,而是做什么人们通常希望。如果他们想别的东西,机会就是他们谈论格式化输出值;那就是当你想使用:

format %6f $doubleValue

或类似的东西,以在他们希望看到的实际格式产生一个值。

在tcl_precision是有点有趣,因为它的声音误导。

它主要影响它如何打印变量而不是如何它内部计算它。

内部TCL使用C型双这样的计算所使用的tcl_precision值的相同的C双类型regardeless进行。

所以,如果你

set x 1.123456

set tcl_preceision 2

它会显示1.12但在内部仍然是它最初设定的完全双值。

如果你改变了tcl_precision回说 “10”

有将回到1.123456

所以你没有真正控制它只是显示方式计算精度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top