2

これはおそらく以前に尋ねられた可能性がありますが、関連するものは見つかりませんでした。

特殊なクラスまたは整数の任意/固定量の構造体を介して、一種の任意/10進数演算を実装することは可能/パフォーマンスですか?

明確にさせてください。フロート(私が理解しているように)、仮数、指数、およびおそらく符号ビットを使用します。2 分の 1、4 分の 1、8 分の 1 などを表すことはできますが、10 分の 1 などはできません。

私が提案するのは次のようなものです: 整数の範囲で完全にカバーされる 10 の累乗までの値のみを保持して、数値をプレーンintまたはint64_t一連のこれらで表すようにします (つまり、32 ビットの int の場合、制限は 10^8-1 になります)。これは、計算を簡単にするためだけです。これに指数を追加します。これは、実数を得るために 10 の何乗する必要があるかを示します。

例: 125.36 は、int12536 に等しく、10 の累乗が -2 に等しいことで表されます。この数は実際には s と同じくらい多くintの特別な関数を必要とします。

別の例: 4,294,967,297 (2^32+1) は 2 つintの s を取り、1 つは 4 に等しく、もう 1 つは 294,967,297 に等しく、10 の累乗は 0 に等しくなります。

これは、より単純で高速な演算のためにすべてのメモリを捨ててよい考えですか? オーバーフローの部分についてはよく考えていませんが、おそらく計算int32_t+int32_t=int64_tするとそれが美しく解決されるでしょうか?

4

2 に答える 2

0

あなたは2進演算の精度の限界について考えています。2進数の精度を10進数の精度と交換しても、どこにも到達しないと思います。

そうです、2進数は1/2と1/4を表すことができますが、10進数ができる1/10は表すことができません。しかし、両方とも1/3を表すことはできません。したがって、精度には常にいくつかの制限があります。(実際のデータのほとんどは小数点以下の形式で取得されるため、小数点以下の計算では非表示になる場合があります。つまり、ほとんどの実際のデータは小数点以下の桁数に丸められます。)

そうは言っても、あなたが意図しているように見える振る舞いを実装したpython Decimalパッケージ(pythonがあなたの言語の場合)を見ることができます:学校で学んだ方法で「必要に応じて」精度で10進数を計算します。

于 2011-06-04T15:30:38.037 に答える
0

一般的な小数算術のページを参照してください

于 2011-06-04T15:16:22.653 に答える