35 lines
1.2 KiB
Tcl
35 lines
1.2 KiB
Tcl
catch {namespace delete test_almost_equal_decimal} ;# Start with a clean namespace
|
|
|
|
namespace eval test_almost_equal_decimal {
|
|
package require Tcl 8.5 ;# required by tcllib
|
|
package require math::decimal ;# from tcllib
|
|
namespace import ::math::decimal::* ;# for: setVariable, fromstr, and compare
|
|
|
|
array set yesno {0 Yes -1 No 1 No} ;# For nice output
|
|
|
|
# More info here: http://speleotrove.com/decimal/dax3274.html
|
|
# This puts the library into "simplified" mode. Which
|
|
# rounds the "decimal digits" in the coefficient to the
|
|
# number of digits that "precision" is set to.
|
|
setVariable extended 0
|
|
setVariable precision 9
|
|
|
|
set data {
|
|
{100000000000000.01 100000000000000.011}
|
|
{100.01 100.011}
|
|
{[expr {10000000000000.001 / 10000.0}] 1000000000.0000001000}
|
|
{0.001 0.0010000001}
|
|
{0.000000000000000000000101 0.0}
|
|
{[expr { sqrt(2) * sqrt(2)}] 2.0}
|
|
{[expr {-sqrt(2) * sqrt(2)}] -2.0}
|
|
{3.14159265358979323846 3.14159265358979324}
|
|
}
|
|
set data [subst $data] ;# resolves expressions in the list
|
|
|
|
foreach {a b} [join $data] {
|
|
set a_d [fromstr $a]
|
|
set b_d [fromstr $b]
|
|
|
|
puts [format "Is %26s ≈ %21s ? %4s." $a $b $yesno([compare $a_d $b_d])]
|
|
}
|
|
}
|