0

私は TCL 8.4 を使用していますが、以下は期待どおりに動作しますが、

% if { 50.02 < 50.02 } { puts HI }
% set s 50.02
50.02
% if { $s <  50.02 } { puts HI }
% set high 50.02
50.02
% if { $s <  $high } { puts HI }
%
%
% if { 50.02 < $high } { puts HI }

この次が機能しないのはなぜですか? 私は本当にこの行動を理解できません。注: $s が 50.03 の場合、期待どおりに動作します。

% set s [ expr 50.01 + 0.01 ]
50.02
% if { $s <  $high } { puts HI }
HI
% set s [ expr double(50.01 + 0.01) ]
50.02
% if { $s <  $high } { puts HI }
HI
4

1 に答える 1

0

浮動小数点数は正確に格納できません。数学的に等しいはずの 2 つの数値の場合、比較結果が正しくない場合があります。

私の Tcl 8.6 は次のように出力します (そして、得られる結果を説明するかもしれません):

% set s [ expr 50.01 + 0.01 ]
50.019999999999996

これに関する詳細は、wiki.tcl.tk で入手できます: A real problem

于 2015-12-12T17:21:50.847 に答える