我在日常工作中不使用 Tcl。然而,我的一位同事偶尔会与一位客户互动,他希望我们的工具的扩展语言更像 Tcl(!)。他提出的一个主题是 Tcl 如何让他通过全局变量 tcl_ precision 设置 double 值存储的精度。
我做了一些网络搜索,我发现的文档似乎表明情况确实如此(而不仅仅是设置打印精度)。然而,看起来 tcl_ precision 的历史似乎是曲折的。我的印象是,它在一两个版本中被完全删除,然后又放回去,但有关于覆盖默认值 0 的警告和啧啧称赞,这实际上意味着 17(手册 promise 足以代表任何 IEEE第754章
那么谁能告诉我更多关于 tcl_ precision 实际 promise 做什么,以及它对 double 的幕后影响是什么?它只是打印数字的全局设置,还是实际上截断存储的数字的精度(这对我来说似乎很危险)?
最佳答案
我认为您的客户的理解不正确。
我相信 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 类型 double,提供大约 15 位十进制数字的精度。
关于floating-point - tcl_ precision 的状态如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2286340/