systemGuess
を丸める方法はありますか?この場合、systemGuess
の結果は5.5です。これを6にするにはどうしたらよいですか?以下このintをどのように丸めますか
を参照してくださいコード:
int main(void){
int systemGuess = 0;
stystemGuess = (10 - 1)/2 + 1;
printf(" %d ", stystemmGuess);
}
systemGuess
を丸める方法はありますか?この場合、systemGuess
の結果は5.5です。これを6にするにはどうしたらよいですか?以下このintをどのように丸めますか
を参照してくださいコード:
int main(void){
int systemGuess = 0;
stystemGuess = (10 - 1)/2 + 1;
printf(" %d ", stystemmGuess);
}
あなたは、問題は、あなたが整数計算を行うことである
systemGuess = (10 - 1)/2.0 + 1 + 0.5;
を使用することができます。 9/2は4です。9/2.0を使用する場合は浮動小数点の除算があり、4.5が得られます。最後に0.5を追加すると、あなたの代わりに5.5の6.0を与えるので、systemGuess
に格納するとき、あなたの代わりに5
ここに誰もがオランダ人ではありません。 – orlp
私はすでにこれを試しました。これは動作しません。 –
申し訳ありませんが、私はそのオランダ語の変数名で質問を見ました。変更しました – jfschaefer
整数部がCtruncates toward 0なので、0の反対側で(つまり負の数で)計算すると「丸められます」。あなたは、配当金の量を減算し、その結果に戻ってその半分の量を追加することでこれを行う可能性があります:
int main(void)
{
int systemGuess = 0;
//systemGuess = (10 - 1)/2 + 1;
systemGuess = (10 - 1 - 20)/2 + 1 + 10;
printf(" %d ", systemGuess);
}
は、おそらくあなたの本当のプログラムでこれを実現するために、よりエレガントな方法があります。ここで
あなたが行く:
#include <stdio.h>
#include <stdlib.h>
int divide(int x, int y);
int main(void){
int systemGuess = 0;
int x = 10-1;
int y = 2;
systemGuess = divide(x,y) + 1;
printf(" %d ", systemGuess);
}
int divide(int x, int y) {
int a = (x -1)/y +1;
return a;
}
OPは結果切り上げて整数除算を実行しよう。
// If the quotient fraction > 0, return next larger number.
unsigned udiv_ceiling(unsigned n, unsigned d) {
return (n + d - 1)/d;
}
// If the quotient fraction >= 0.5, return next larger number.
unsigned udiv_nearest_ties_up(unsigned n, unsigned d) {
return (n + d/2)/d;
}
stystemGuess = udiv_ceiling(10 - 1, 2) + 1;
// or
stystemGuess = udiv_nearest_ties_up(10 - 1, 2) + 1;
負の数を処理し、コーナーケースでは、n + d - 1
オーバーフローから保護するために必要な追加のコード。
正常に丸めたい場合は、stystemGuessに割り当てる前に合計に「.5」を追加します。 – Riley
適用しようとしている丸めルールによって異なります。整数除算のすべての結果を丸めたい、または.5のタイブレークルールを持つ最も近い整数に丸めたいのですか、それとも何ですか? –