[過去ログ] スレ立てるまでもない質問はここで 158匹目 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
258(3): 2021/11/23(火)00:51 ID:K88b3pAI(1/2) AAS
C言語で定数畳み込み最適化を前提とする場合ってどのような書き方が望ましいの?
double a = 1000.0;
double b = 5000.0;
double c = 1024.0 / (a / b); // ここは浮動小数点演算でコストが高いためコンパイル時に計算して欲しい
int y = (x * (int)c) / 1024; // ここは乗算&シフトのマシンコードになって欲しい
事前に計算して埋め込めば間違いないけど保守性や可読性を考えるとコンパイル時に計算してくれた方がありがたい
262(2): 2021/11/23(火)03:34 ID:uSTzbvDM(1) AAS
プログラミング用語なのか?
あっちでは、「何かあった印に旗を立てておく」って大昔からままある行為なんじゃないの?
だからflagがこの意味なんだと思ってた
>>258
可読性ならコメントに書いときゃいい
270(2): 2021/11/23(火)14:53 ID:Vfqk4Xs7(1) AAS
>>258
const double a = 1000.0;
const double b = 5000.0;
const double c = 1024.0 / (a / b);
int y = (x * (int)c) / 1024;
273: 2021/11/23(火)16:49 ID:TQTwdqd6(1) AAS
>>258
その程度なら今時たいていのコンパイラはやってくれるよ
Visual Studio 2017 でやると a, b, c はそれぞれ 1000.0, 5000.0, 5120.0 の定数に展開されるし
int y = (x * (int)c) / 1024;
は
y = x * 5;
に展開される
ちなみにこの式はシフトどころか
lea ax, [eax+4*eax]
の1命令にコンパイルされる
>>270
const は単に書込しちゃだめだよって指示するだけで予め計算することを指示するわけじゃない
const volatile なんて指定すらできるんだし
コンパイル時に計算さておくことを保証したいならC++にしてconstexprを使えばいいかと
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.043s