[過去ログ]
「数学」をプログラミングするには (1002レス)
「数学」をプログラミングするには http://mevius.5ch.net/test/read.cgi/tech/1710585705/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
95: デフォルトの名無しさん [] 2024/03/24(日) 11:46:51.50 ID:BUlt442E プログラム言語は機械語→アセンブラ→高級言語 と進化してきたが、高級言語にも高級度の段階があって gotoジャンプ→構造化ループ→map→ベクトル演算 という序列になっている。 y = x.map(i => 2 * i) のように冗長な記述をしなければならない言語よりは、ベクトル演算で y = 2 * x と すっきり書けるFortranの方が進化している。 http://mevius.5ch.net/test/read.cgi/tech/1710585705/95
104: デフォルトの名無しさん [] 2024/03/24(日) 20:58:49.18 ID:BUlt442E >>97 >> 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はベクトル演算に言語仕様レベルで対応しているから、そんなことするはずないだろ。 http://mevius.5ch.net/test/read.cgi/tech/1710585705/104
105: デフォルトの名無しさん [] 2024/03/24(日) 20:59:19.43 ID:BUlt442E 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始まりなのは非効率なのかと思ってしまうが…) http://mevius.5ch.net/test/read.cgi/tech/1710585705/105
106: デフォルトの名無しさん [] 2024/03/24(日) 20:59:35.15 ID:BUlt442E インタプリタのRubyや、配列っぽく見える[1, 2, 3]がリンクリストのHaskellが効率を 云々するのは馬鹿げているな。 http://mevius.5ch.net/test/read.cgi/tech/1710585705/106
107: デフォルトの名無しさん [] 2024/03/24(日) 21:02:48.75 ID:BUlt442E >>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; http://mevius.5ch.net/test/read.cgi/tech/1710585705/107
110: デフォルトの名無しさん [] 2024/03/24(日) 23:11:46.55 ID:BUlt442E >>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; に変わるだけだぞ。 http://mevius.5ch.net/test/read.cgi/tech/1710585705/110
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.033s