2つの10進数の差(距離)を計算するには、完璧なアルゴリズムまたはC#関数が必要です。
たとえば、
100と25の違いは75
100であり、-25は125-100であり、-115は
15-500であり、100は600です。
これを計算するためのC#関数または非常に洗練されたアルゴリズムがありますか、それともifsを使用してすべてのケースを個別に処理する必要があります。
そのような関数またはアルゴリズムがある場合、それはどれですか?
あなたはこのようにそれを行うことができます
public decimal FindDifference(decimal nr1, decimal nr2)
{
return Math.Abs(nr1 - nr2);
}
result = Math.Abs(value1 - value2);
誰もここに書いていないので、これを追加するだけです:
確実に使えるうちに
Math.Abs(number1 - number2);
これが最も簡単な解決策(そして受け入れられた答え)ですが、Absが実際に何をするかを誰も書いていないのだろうか。これは、 Java、C、C#、および C のような構文を持つ他のすべての言語で機能するソリューションです。
int result = number1 - number2;
if (result < 0) {
result *= -1;
}
それはとても簡単です。次のように書くこともできます。
int result = number1 > number2 ? number1 - number2 : number2 - number1;
最後のものは、コンパイルされるとさらに高速になる可能性があります。両方とも if と減算が 1 つずつありますが、最初のものには乗算があり、最後のものにはない場合があります。なぜ一部のケースだけ?一部の CPU には「符号の交換」操作があり、コンパイラは何を*= -1
行うかを認識します。符号を交換するだけなので、乗算の代わりに、それを提供する CPU に対して符号の交換操作を発行します。この操作は CPU 操作と同じくらい高速です。取得できます (通常は 1 クロック サイクル)。
最初のコード例は、ほとんどの実装で Abs が行っていることを実際に実行して、サポートされている場合は「スワップ符号」を利用しています。最後のコード例は、「スワップ符号」がなく、乗算が加算よりも高価な CPU で高速になります (最新の CPU は、多くの場合同等に高速です)。
C#では不可能だと思います。アセンブラーでの実装を検討する必要があるかもしれません。