[過去ログ] 「数学」をプログラミングするには (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
95(1): デフォルトの名無しさん [] 2024/03/24(日) 11:46:51.50 ID:BUlt442E(1/6) AAS
プログラム言語は機械語→アセンブラ→高級言語 と進化してきたが、高級言語にも高級度の段階があって
gotoジャンプ→構造化ループ→map→ベクトル演算 という序列になっている。
y = x.map(i => 2 * i) のように冗長な記述をしなければならない言語よりは、ベクトル演算で y = 2 * x と
すっきり書けるFortranの方が進化している。
104(2): デフォルトの名無しさん [] 2024/03/24(日) 20:58:49.18 ID:BUlt442E(2/6) AAS
>>9797(2): デフォルトの名無しさん [sage] 2024/03/24(日) 14:30:14.37 ID:rmOZT0bw(1) AAS
>>95
それはarrayを入出力とするmapだね
それは遅延評価もできず可算無限列を扱えない古い劣化タイプ
一方でiteratorを入出力とするmapはarrayだけでなく可算無限列など任意のものを対象にできる
>> 100
Ruby厨、Haskell厨が他の言語を貶めるのに必死だなw
Fortranのプログラム
program test
integer :: x(3), y(3)
x = (/1, 2, 3/)
y = 2 * x + 1
print "(i0)", y
end program
の y = 2 * x + 1 の行で中間配列が作成されて、
integer :: temp(3)
temp = 2 * x
y = temp + 1
のような非効率な動作になるとでも思ってるのか? STLで提供しているC++のvalarrayと違って、
Fortranはベクトル演算に言語仕様レベルで対応しているから、そんなことするはずないだろ。
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始まりなのは非効率なのかと思ってしまうが…)
106: デフォルトの名無しさん [] 2024/03/24(日) 20:59:35.15 ID:BUlt442E(4/6) AAS
インタプリタのRubyや、配列っぽく見える[1, 2, 3]がリンクリストのHaskellが効率を
云々するのは馬鹿げているな。
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;
110: デフォルトの名無しさん [] 2024/03/24(日) 23:11:46.55 ID:BUlt442E(6/6) AAS
>>108無限なんて実行不可能なものを構文として書けても、コメントとして書けるのと同じようなもので無意味。
>>109109(2): デフォルトの名無しさん [] 2024/03/24(日) 23:00:28.05 ID:D7nIPk2H(1) AAS
静的な固定長で最適化できるのは当たり前だから
少なくとも実行時までわからない可変長じゃないとな
何を頓珍漢なことを言ってるんだよ。
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.032s