実行時bc -l
ibase=obase=16 を設定した場合は、「0.2 * 5」を求めます。
それは.8に等しい。16 進値の 1 と等しくないのはなぜですか?
私はもともとこれをここで尋ねました(http://bit.ly/17o7RcK)。
実行時bc -l
ibase=obase=16 を設定した場合は、「0.2 * 5」を求めます。
それは.8に等しい。16 進値の 1 と等しくないのはなぜですか?
私はもともとこれをここで尋ねました(http://bit.ly/17o7RcK)。
問題は、16 進数で入力を行っていることですが、10 進数で内部計算を行っており、16 進入力の長さを使用して、数値を表現する 10 進数の桁数を決定していると思います。したがって、「0.2」(16 進数) を入力すると、最も近い 1 桁の 10 進数である 0.1(10 進数) に変換されます。これに 5 を掛けると、0.5(dec) = 0.8(hex) が得られます。
これは、より多くの 10 進数を使用するように強制することで確認できます。「0.20 * 5」を実行すると、0.20(hex) が 0.12(dec) に変換され、これに 12 を掛けると 0.60(dec) になり、出力では 0.99(hex) に丸められます。「0.200 * 5」を実行すると、0.200(hex) が 0.125(dec) に変換され、5 を掛けると 0.625(dec) になり、これが 0.A00(hex) に変換されます。これが「正しい」結果です。