[過去ログ] 「数学」をプログラミングするには (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
105(1): デフォルトの名無しさん [] 2024/03/24(日) 20:59:19.43 ID:BUlt442E(3/6) AAS
Visual Stduioで y = 2 * x + 1 の行の逆アセンブリを見てみると、
mov qword ptr [rbp + 68h], 1
mov rax, qword ptr [rbp + 68h]
cmp rax, 3
jg TEST + 105h
mov rax, qword ptr [rbp + 68h]
imul rax, rax, 4
lea rdx, [X]
add rdx, rax
add rdx, 0FFFFFFFFFFFFFFFCh
mov eax, dword ptr [rdx]
imul eax, eax, 2
inc eax
mov rdx, qword ptr [rbp + 68h]
imul rdx, rdx, 4
lea rcx, [Y]
add rcx, rdx
add rcx, 0FFFFFFFFFFFFFFFCh
mov dword ptr [rcx], eax
mov eax, 1
add rax, qword ptr [rbp + 68h]
mov qword ptr [rbp + 68h], rax
jmp TEST + 0B7h
というコードが生成されていて、中間配列なんて作成せず合成関数を1回だけ適用し、Cの
for (i = 1; i <= 3; i++) y[i] = 2 * x[i] + 3;
に相当する効率的な処理になっている。(add rdx, 0FFFFFFFFFFFFFFFCh を見ると、
配列の添字が1始まりなのは非効率なのかと思ってしまうが…)
107: デフォルトの名無しさん [] 2024/03/24(日) 21:02:48.75 ID:BUlt442E(5/6) AAS
>>105の訂正
(誤) for (i = 1; i <= 3; i++) y[i] = 2 * x[i] + 3;
(正) for (i = 1; i <= 3; i++) y[i] = 2 * x[i] + 1;
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.038s