No.8ベストアンサー
- 回答日時:
((a << 1) / b + 1) >> 1
はどうでしょう。
私の環境では下のプログラムで約30秒でした。
ただ、
(a / b * 10 + 5) / 10
もやっぱり30秒だったんですよね。
ビット演算のほうが計算コストがかからなかったはずなんですけど。
コンパイラが最適化してくれたのかな。
inline int div(int a, int b){
return ((a << 1) / b + 1) >> 1;
}
int main(){
int a,b;
time_t starttime;
time(&starttime);
for(a=1;a<100000;a++)
for(b=1;b<100000;b++)
div(a,b);
printf("%d second\n",time(NULL)-starttime);
return 0;
}
この回答へのお礼
お礼日時:2004/01/21 11:54
ありがとうございました。
レスポンスがネックになり、苦労しております。
また、色々と質問をすることがあると思いますので、ご協力をお願いいたします。
No.9
- 回答日時:
これでは意味が無かったですね。
(a / b * 10 + 5) / 10
こちらで。
(a * 10 / b + 5) / 10
ちなみに、
((a << 1) / b + 1) >> 1
は、
(a * 2 / b + 1) / 2
と同義で、上の式を5で約分しただけです。
No.7
- 回答日時:
No.4です。
間違ってたので訂正します。
>(A / B) + (A % B >= (B >> 1));
じゃなくて
(A / B) + (((A % B) << 1) >= B);
です。
ちなみに、これはNo.5の方と同じ意味です。
No.6
- 回答日時:
floatを使っていい場合、まず思いつく(そしておそらくもっとも単純な)のは、
0.5を足して小数点以下切り下げだと思います。
intだけでやるなら、1の補足にあった
10倍して5を足して10で割る(あまりは切り捨て)
が一番早いのではないでしょうか。
No.5
- 回答日時:
では、割り算の理屈から攻めてみます。
C = A / B;
D = A % B;
として剰余Dも同時に求めます。
この剰余Dと「割る数」Bの関係を思い出して下さい。
D/Bは小数部分の解になりますよね。
つまり、DがBの半分より大きければ、小数部は0.5以上の値
という事になり、四捨五入の切り上げ対象となります。
ここでも掛け算・割り算を使わないなら、
if (B <= D + D) {
C++;
}
ですかね。
剰余を求めている時点で割り算が1回増えているというツッコミは
ご勘弁下さい(笑)
No.4
- 回答日時:
>int A
>int B
>A/Bの解を四捨五入したいのですが、全てint型にて処理を行いたいです。
それでは。
(A / B) + (A % B >= (B >> 1));
逆に遅いかも。
No.2
- 回答日時:
・整数にするなら、0.5を足してfloor()関数
・最小桁がわかるなら、(10^(-n)として)0.5*10^(-n)を足して、その桁以下を切り捨てる
・最小桁を変化させたいときは先ほどのnを変化させれるようにする。
でいかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
パスカルのピラミッドを作りた...
-
ラップ関数とはどんなものですか?
-
「{ } で囲むだけ」は正しい?
-
このプログラミング誰か教えて...
-
acceptをalarmでタイムアウトさ...
-
リッチテキストへの行ごとの背...
-
c言語の配列を使ってサイコロを...
-
if と配列の組み合わせ
-
C#のコンパイルエラーCS0120に...
-
C言語に関する質問です
-
C言語でDxlibを使って3x3の奇数...
-
newの使い方について。
-
(int *)の意味
-
atoi関数の自作
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
ColorをRGBで指定する方法
-
未解決の外部シンボル _printf...
-
構造体の勉強中です 合計点の高...
-
商と剰余を同時に求める(C言語)
-
C言語で分からないところがあり...
-
式は定数値が必要です」という...
-
C言語での奇数の和
-
std::set<int> で、ある値が何...
-
課題でつまってます・・・
-
int16_t の _t は何?
-
比較回数と交換回数表示について
おすすめ情報