字符串\列表操作后,tcl中的双精度值失去精度

二元思想

使用tcl时,我发现了这样的一种现象:当我遍历double变量时,它失去了精度。

set dbl  [expr { double(13.0/7.0) }]
set dbl2 [expr { double(13.0/7.0) }]
foreach a $dbl {
}
if { $dbl == $dbl2 } {
    puts "\$dbl == \$dbl2"
} else {
    puts "\$dbl != \$dbl2" ;# they will be not equal
}

我很快就会发现,当您使用适用于字符串或列表的操作(例如,llength,lindex,字符串优先,rsub,foreach等)时,变量的双精度表示将被将要创建或已创建的字符串表示代替。早期,基于$tcl_precision价值。此外,使用set命令创建的这个double变量的每个副本也将被破坏。

有没有一种方法可以在tcl8.4中进行此类操作并且不强制tcl_precision达到某个固定值后又不会失去精度

PSset tcl_precision 0仅适用于tcl8.5或更高版本。

多纳研究员

从Tcl 8.5开始,您的代码应该可以正常工作。在8.5中付出了巨大的努力,以使doubles到字符串(因此到其他类型)的默认转换不会丢失信息。它还尝试使用最小位数进行此操作,其理由是这样可以最大程度地减少给人们带来的惊喜。是的,我们有一位真正的专家在为此工作。

对于8.4及更早版本,将其设置tcl_precision为17。这可以确保不会丢失任何有效位,尽管所使用的表示可能比最小的要长得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

包含双精度值的字符串列表中的Collections.min()方法混乱

将字符串转换为双精度-失去精度

如何在将双精度值转换为字符串后从双精度值中删除小数点

字符串到双精度转换在Swift中失去精度

在 Swift 中从字符串中提取双精度值

从字符串获取双精度值

在Java8中将逗号分隔的双精度值字符串拆分为双精度数组

将字符串列表转换为双精度列表而不丢失信息(VB.net)

覆盖双精度字符串后保持0

Spark中双精度值的精度

将双精度列表转换为分组字符串

如何将数组中的输入双精度值比较为空/字符串值(“”)?

将字符串从Firebase转换为双精度值

返回传递的字符串的双精度值

如何从 char16_t 字符串文字中读取双精度值?

使用Java中的RegEx从字符串中提取两个双精度值

如何从数组中输出字符串、整数和双精度值?

C ++,如何从字符串中获取正确的双精度值?

从数组中的拆分字符串的双精度值创建集合

在ArrayList中连接字符串和双精度

当双精度值有小数点时,双精度值被转换为字符串值

Spark for Python-无法将字符串列转换为十进制/双精度

将char *中的字符替换为双精度值

在 Java 中操作字符串列表

Java双精度转换为特定精度的字符串

为什么我的字符串在将其转换为双精度值后没有传递给我的方程?

字符串到双精度方法

Java中具有特定精度的双精度值

最合适的“ 2D”表示形式,用于在Java中并排存储字符串和双精度值?