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で質問しましょう!
似たような質問が見つかりました
- 数学 「家から駅まで7.2km/時の速さで走ったところ、4.8km/時の速さで歩いた時に比べて5分早く着い 3 2022/03/31 17:59
- 教育学 エクセルで小数点以下を四捨五入について教えてください。 2 2023/04/05 17:33
- その他(学校・勉強) (10)の計算方法を教えてください。 ちなみに(9)は2.04を四捨五入して2になって⭕️でした。 1 2023/07/19 13:58
- 数学 数学『データの分析』 √22を少数にする際 「4.6904…」だったので 4を四捨五入し0を切り捨て 5 2023/03/03 12:59
- 高校 x,yを正の数とする。x,3x+2yを少数第一位で四捨五入すると、それぞれ6,21になるという。yの 1 2023/04/05 23:32
- 数学 小数点の計算についてです。 答えは与えられた数字の中で最も少ない桁に四捨五入で合わせるのですが、ひと 2 2023/04/04 15:19
- 小学校 がい数の問題の文章の意味 4 2022/11/21 14:25
- 環境学・エコロジー メタン 100 g を使って、コンバインドサイクル発電を行ったところ、34キロワット (34,000 2 2023/01/22 14:00
- 化学 課題を理解したいので教えてください なるはやでお願いします( . .)" 100 mL の溶液中に 1 2023/05/08 23:12
- Excel(エクセル) エクセルでround関数を使わないで四捨五入する方法 10 2022/08/12 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
卒業研究でよく分からないとこ...
-
ラップ関数とはどんなものですか?
-
if と配列の組み合わせ
-
C言語初心者です、、、お助けく...
-
【C++】関数ポインタの使い方
-
アスタリスクで正方形
-
インライン展開されているか確...
-
構造体の勉強中です 合計点の高...
-
異なる文字列のマッチングを、D...
-
数字列を3桁ごとにカンマで区切...
-
C言語 配列と関数の練習問題
-
C言語で三目並べをするプログラ...
-
入力を待たずにstdinの監視をし...
-
ファイルから読みこむ方法
-
課題でつまってます・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報