質問

質問

16進ポイントを使用して一部の16進数を処理したいのですが、dc精度の問題が発生します。たとえば、以下では両方とも16進数F423F.FDを掛けます100。期待される答えはですF423FFD。代わりに提供されるものはF423FFA.E1近いですが、丸め後も十分に正確ではありません。

$ dc
16 d i o F423F.FD 100 * p
F423FFA.E1

dc私はこれが無限精度計算機であり、決して大きな数字ではないことを読みました。私は何が間違っていましたか?

答えてくれてありがとう。問題を考慮して、dc私は弾丸を壊し、他の基礎の間違いを解析するために独自のパーサーを作成しました。誰でもコードに興味がある場合は、ここに投稿できます。

ベストアンサー1

10進表記法(dc変換用)で表現すると999999.98(捨て)×256に該当し、つまり255999994.88(16進 F423FFA.E1)

したがって、違いは次dcの丸め動作で発生します。 256×(999999 + 253 ¼ 256)(255999997提供)を計算する代わりに、253 ¼ 256を四捨五入して結果を掛けます。

dc普段着精密計算機は、ユーザーが望む精度で計算できますが、それが何であるかを知らせる必要があることを意味します。デフォルトでは、精度は0です。つまり、除算は整数値のみを生成し、乗算は入力の桁数を使用することを意味します。精度を設定するにはk:

10 k
16 d i o
F423FFD 100 / p
F423F.FD0000000
100 * p
F423FFD.000000000

(10進数で1 ¼ 256を表現するのに必要な精度は8桁で十分です。)

おすすめ記事