1

一部の C コード (Linux マシンで実行されたもの) を .Net に変換する必要があり、long double を使用する操作がいくつか見つかりました。それらは特別な操作ではなく、多くの小数で終わるいくつかの乗算と除算です。そのサイズのためだけに型が使用されたようです。

コードを変換するにはどうしますか? コードはとにかく最後に短い値を返すため、値を乗算して最後に割り戻して、それが役立つかどうかを確認することを考えています。さらに、元のバイナリが実際にすべてのサイズを長いものに使用していたかどうかもわかりません。 double が提供できるか、フードの下で一般的な 64 ビット double を使用していた場合。

これが良い考えだと思わない場合は、long double をラップしてシミュレートするために使用できるクラスまたは構造を知っていますか? C/C++ でラッパーを作成し、.Net から呼び出すことは「不可能」です。

4

3 に答える 3

2

C の long double が実際に double にマップされている可能性が最も高いため、計算について詳しく知らなくても、C# で double を使用しても問題ないと思います。

私の経験では、科学計算または工学計算で 64 ビット double では不十分な計算を見つけることは非常にまれです。

double で十分であることを 100% 確実にする唯一の方法は、アルゴリズムを研究することであるため、このアドバイスは本能と経験のみに基づいています。

于 2011-08-09T07:35:48.543 に答える
0

.net では、現在利用可能な最高精度の実数型である decimal があります。10 進数は、正確で範囲が広いため、主に財務計算に使用されます。ただし、double に比べて遅いため、科学計算にはお勧めできません。

于 2011-08-09T07:21:59.970 に答える
0

試してみてくださいSystem.Decimal(別名decimalC#) - これは 96 ビットの数値で、基数 10 の算術演算 (丸めなど) を使用するため、通貨などを含むシナリオに特に適しています。IEEE にはマップされませんが、C コンパイラによってはどちらもマップされませんlong double;p ソフトウェアで実装されていることに注意してください。

于 2011-08-09T07:23:22.623 に答える