При работе с tcl я обнаруживаю такое поведение: когда я перебираю двойную переменную, она теряет свою точность.Двойные значения теряют точность в tcl после операции string list
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, Еогеасп и т.д.) двойное представление переменной будет заменено строковое представление который будет создан или был создан ранее, на основе значения $tcl_precision
. Кроме того, каждая копия этой двойной переменной, созданная командой set
, также будет испорчена.
Есть ли способ не потерять точность после таких операций в tcl8.4 и без принуждения tcl_precision
к некоторому фиксированному значению?
P.S. set tcl_precision 0
будет работать только в версиях tcl8.5 или выше.