4

整数の配列があるとしましょう。単純化するために、論理的に2つの部分に分割してみましょう。

total sum配列のすべての要素がであるとしましょう2860800

left halfのすべての要素の合計がであるとしましょう2834387

right halfのすべての要素の合計がであるとしましょう26413

ここで、によって左半分のパーセンテージを計算し100m * leftHalfSum / totalSumます99.07672678970917225950782998

同様に、右半分のパーセンテージ100m * rightHalfSum / totalSumはです0.9232732102908277404921700224

ここで、これら2つのパーセンテージをVisual StudioのWatchに追加すると、が表示されます100Calculatorしかし、これらをWindowsのアプリに追加すると100.0000000000000000000000000024、正しい結果が得られます。

基本的に、私は100-leftHalfPercentage厳密に等しくなりたい、rightHalfPercentageまたはその逆です。100-leftHalfPercentage私がウォッチでやるなら、それは私に与えます0.92327321029082774049217002。とまったく同じですrightHalfPercentageが、最後の2桁24が欠落していることに注意してください。

ありがとう。

4

2 に答える 2

2

小数の最大精度は有効数字28〜29桁です(ソース)。計算の完全な結果は30桁の長さで、小数の場合はかなりの長さになります。そのため、最後の2桁は省略されています。

結果が大きくなる場合(たとえば、合計が100ではなく10.000になる場合)、さらに多くの桁が省略されます。

違いはおそらく内部的なものが原因であり、おそらく私よりも知識のある誰かがコンパイルされたコードを検査する必要があります。

于 2012-08-27T11:27:55.633 に答える
2

計算した数値は正しいです。つまり、同じ程度の精度でパーセンテージを表しています。

それらの合計を正確に100にしたい場合は、精度の低い値の1つを選択する必要があります。犠牲にすることを選択した値は、100から他のすべての値を引くことによって単純に計算されます。

たとえば、小数点以下1桁で計算された3つの等しいグループがあると33.3%、それぞれが得られ、合計が.になり99.9%ます。合計を作成するには100%、1つのグループの正しさを犠牲にして、それをとして計算し100 - 33.3 - 33.3 = 33.4ます。

于 2012-08-27T11:31:09.850 に答える