tclで作業しているとき、私はそのような動作を発見します。私はすぐに見つけるとして、あなたは、文字列またはリスト(例えばllength、LINDEX、文字列の最初の、RSUB、foreachの、など)で動作する操作を使用する場合文字列リスト操作の後、double値の精度がtclで失われる
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
}
、変数の二重の表現は、文字列表現に置き換えられます$tcl_precision
の値に基づいて作成されるか、以前に作成されたものです。さらに、set
コマンドで作成されたこの二重変数のすべてのコピーも損なわれます。
tcl8.4でこのような操作を行った後に精度を失うことなく、ある一定の値に強制的にtcl_precision
を強制しない方法がありますか?
P.S. set tcl_precision 0
はtcl8.5以上のバージョンでのみ動作します。