7

非常に大きな数を処理する必要があるアプリに取り組んでいます。

いくつかの利用可能な LargeNumber クラスを調べたところ、満足できるクラスがいくつか見つかりました。大きな整数と大きな浮動小数点数のクラスがあります。

一部の数値は小さく、一部は大きいため、数値の長さを確認する価値があるかどうかが問題になります。数値が小さい場合は通常の C# int または double を使用し、大きい場合は他のクラスを使用します。すでにLarge IntegerクラスとLarge Floatクラスを使用しています。小さい数値でもそのまま使用する必要があります。

私の考慮事項は純粋にパフォーマンスです。小さい数字の計算に十分な時間を節約できるので、数字を入れた後に各数字を確認する価値があります.

4

4 に答える 4

2

本当にわかりにくい-サードパーティのライブラリに依存します:)

最善の策は、System.Diagnostics.StopWatch クラスを使用し、膨大な数の異なる計算を行い、時間を計って結果を比較することだと思います..

[編集] - ベンチマークについては、通常の 32/64 ビット数値の計算を行うために、largeInt 型の一連のベンチマークを行い、数値が通常の Int32/Int64 型 (これはこれらの型に「ダウンキャスト」してから、これらの型を使用して同じ計算を実行します。あなたの質問から、これは、組み込み型がより高速である場合に行うことのように聞こえます..

あなたのアプリケーションが自分よりも多くの人を対象としている場合は、別のマシン (シングル コア、マルチコア、32 ビット、64 ビット プラットフォーム) で実行してみてください。プラットフォームが計算にかかる時間に大きな影響を与えると思われる場合は、何らかの方法を使用してください。異なるマシンで異なる方法で計算を行うための戦略パターンの。

幸運を :)

于 2009-03-01T14:10:14.510 に答える
2

まともな多数のライブラリがこの最適化を独自に実行できると期待しています...

于 2009-03-01T14:17:10.217 に答える
2

はい、通常の範囲内に十分な値がある限り、小切手はそれだけで十分です。

ロジックは単純です。整数の加算は 1 つのアセンブリ命令です。比較と組み合わせると、3 つまたは 4 つの命令になります。このような操作のソフトウェア実装は、おそらくはるかに遅くなります。

最適には、このチェックは LargeNumber ライブラリ自体で行う必要があります。彼らがそれをしない場合は、あちこちでチェックが行われるのを避けるためにラッパーが必要になる場合があります。ただし、ラッパーの追加コストも考慮する必要があります。

于 2009-03-01T14:17:46.877 に答える