[過去ログ] 「数学」をプログラミングするには (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
95(1): 2024/03/24(日)11:46 ID:BUlt442E(1/6) AAS
プログラム言語は機械語→アセンブラ→高級言語 と進化してきたが、高級言語にも高級度の段階があって
gotoジャンプ→構造化ループ→map→ベクトル演算 という序列になっている。
y = x.map(i => 2 * i) のように冗長な記述をしなければならない言語よりは、ベクトル演算で y = 2 * x と
すっきり書けるFortranの方が進化している。
104(2): 2024/03/24(日)20:58 ID:BUlt442E(2/6) AAS
AA省
105(1): 2024/03/24(日)20:59 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始まりなのは非効率なのかと思ってしまうが…)
106: 2024/03/24(日)20:59 ID:BUlt442E(4/6) AAS
インタプリタのRubyや、配列っぽく見える[1, 2, 3]がリンクリストのHaskellが効率を
云々するのは馬鹿げているな。
107: 2024/03/24(日)21:02 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;
110: 2024/03/24(日)23:11 ID:BUlt442E(6/6) AAS
>>108
無限なんて実行不可能なものを構文として書けても、コメントとして書けるのと同じようなもので無意味。
>>109
何を頓珍漢なことを言ってるんだよ。
for (i = 1; i <= 3; i++) y[i] = 2 * x[i] + 1; が
for (i = 1; i <= n; i++) y[i] = 2 * x[i] + 1; に変わるだけだぞ。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s