[過去ログ] 「数学」をプログラミングするには (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