3

次のように、3 つの数値の平均を計算したいと思います。

d = int(round((a + b + c) / 3.0))

、、、aは整数bですcd

整数のみを使用して同じ結果を得ることができますか?

パフォーマンス上の理由から、これに興味があります。整数を使用して計算を行う方が、浮動小数点数を使用するよりも高速であると思います。

上記の例では、整数を浮動小数点数に変換し、結果を計算して丸め、整数に戻しています。int <-> float 変換を回避することは可能ですか?

4

4 に答える 4

9

1、1、2 -> 1 の要件があるとします。1, 2, 2 -> 2 の場合、これは整数除算を使用して実行できます。

整数除算に // を使用し、要素数に n を使用します。

average = ( a+ b + c + .... + n//2 ) // n

つまり、すべての値を合計してから、丸めを処理するために数値を追加します。

@Henrikの回答で述べたように、これはすべての数値が正であると仮定しています。

于 2012-08-10T12:10:14.377 に答える
3

(a + b + c + 1) / 3

説明: (a + b + c) % 3 == 1 の場合、切り捨てられます。(a + b + c) % 3 == 2 の場合、切り上げられます。

少なくともこれはa + b + c >= 0. 負の値を個別に処理する必要がある場合があります。

于 2012-08-10T12:06:56.283 に答える
2

1つの部門のみを使用したMahmoudの回答の変形:

d = (((a+b+c) * 10) + 15) / 30
于 2012-08-10T12:07:35.443 に答える
1

それはそれと同じくらい簡単でなければなりません:

d = (((a+b+c) * 10) / 3 + 5) / 10;
于 2012-08-10T12:02:56.470 に答える