[過去ログ] 「数学」をプログラミングするには (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
99: デフォルトの名無しさん [sage] 2024/03/24(日) 15:27:25.02 ID:pjttU2nz(1) AAS
所有権を複製したいんやろw
100: デフォルトの名無しさん [sage] 2024/03/24(日) 15:28:49.95 ID:4Iqs5Xee(1) AAS
>>9797(2): デフォルトの名無しさん [sage] 2024/03/24(日) 14:30:14.37 ID:rmOZT0bw(1) AAS
>>95
それはarrayを入出力とするmapだね
それは遅延評価もできず可算無限列を扱えない古い劣化タイプ
一方でiteratorを入出力とするmapはarrayだけでなく可算無限列など任意のものを対象にできる
昔は配列に対するmapしか無かったから、遅延評価できず、有限列しか扱えず、中間生成配列のムダなど、悲惨だったな
今はイテレータに対してmapその他を適用するプログラミング言語が増えたので、扱える対象が広がるとともに、効率も良くなったな
101: デフォルトの名無しさん [sage] 2024/03/24(日) 16:53:04.14 ID:GMGvnUD/(3/3) AAS
そんな低レベルの話してるんとちゃうんやで
102: デフォルトの名無しさん [] 2024/03/24(日) 18:55:43.95 ID:qF9URZLj(1) AAS
そもそも高階関数のmapは、数学の集合論における写像のことではない
103: デフォルトの名無しさん [] 2024/03/24(日) 19:36:33.57 ID:WsANI0D/(1) AAS
ゴミみたいな話しかしてないな、定理証明系とかの話をしているのかと思ったら
104(2): デフォルトの名無しさん [] 2024/03/24(日) 20:58:49.18 ID:BUlt442E(2/6) AAS
>>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はベクトル演算に言語仕様レベルで対応しているから、そんなことするはずないだろ。
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;
108(1): デフォルトの名無しさん [sage] 2024/03/24(日) 22:52:27.30 ID:IPqW9Eum(1) AAS
>>104
固定長の配列を入力に使っている時点で失格
このスレは>>11(16): デフォルトの名無しさん [] 2024/03/16(土) 19:41:45.98 ID:nuwGv9us(1) AAS
たとえば、プログラミングで
π/4 = 1 - 1/3 + 1/5 - 1/7 + ...
を近似ではなく厳密に確かめるにはどうしたらいいの
人間が証明できるってことは、有限なアルゴリズムに書き換えられると思うんだけど
の例のように対象は可算無限列
109(2): デフォルトの名無しさん [] 2024/03/24(日) 23:00:28.05 ID:D7nIPk2H(1) AAS
静的な固定長で最適化できるのは当たり前だから
少なくとも実行時までわからない可変長じゃないとな
110: デフォルトの名無しさん [] 2024/03/24(日) 23:11:46.55 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; に変わるだけだぞ。
111: デフォルトの名無しさん [sage] 2024/03/24(日) 23:42:53.58 ID:+hE4ud6c(1) AAS
入力対象は>>1の数列でいいんじゃね
1
1 - 1/3
1 - 1/3 + 1/5
1 - 1/3 + 1/5 - 1/7
1 - 1/3 + 1/5 - 1/7 + ...
もちろん何番目まで必要かは不明
この数列を他と切り離して記述できるかどうか
112: デフォルトの名無しさん [] 2024/03/25(月) 06:31:11.05 ID:20JdvYau(1) AAS
写像型言語は無いから無理やろ
113: デフォルトの名無しさん [sage] 2024/03/25(月) 08:05:29.65 ID:S04445Yl(1) AAS
しょうもない算法や文法を力説されても
数理論理を知らん高卒なんやろか
114: デフォルトの名無しさん [] 2024/03/25(月) 09:05:37.14 ID:KQK4URb5(1) AAS
集合論はラッセルのパラドックスがあるからまちがい
選択公理もバナッハタルスキーのパラドックスがあるからまちがい
圏論こそ数学の基礎
115: デフォルトの名無しさん [sage] 2024/03/25(月) 09:20:11.31 ID:yJIwIJvC(1) AAS
そういう何が一番とか中二思考やめようや
116: デフォルトの名無しさん [sage] 2024/03/25(月) 09:20:53.71 ID:VkynB6Jg(1/4) AAS
アホ参上
117(1): デフォルトの名無しさん [] 2024/03/25(月) 10:25:12.12 ID:VsfGDznC(1) AAS
圏論型プログラミングってないの?
118: デフォルトの名無しさん [sage] 2024/03/25(月) 18:22:08.56 ID:OU4hWxvG(1/2) AAS
集合は悪くないがそれを内包表記で定義するのが悪い
イテレータを内包表記っぽく書けるやつは
内包表記を使わない書き方もできる保証があるから良いけど
119: デフォルトの名無しさん [] 2024/03/25(月) 19:35:21.63 ID:Yjyc3ZYI(1) AAS
Pythonには内包表記はあっても外延表記はないから集合論はできないよ
120: デフォルトの名無しさん [] 2024/03/25(月) 20:38:21.53 ID:0jQlcuCQ(1/2) AAS
>>104はVisual Studioでは最適化オプションがなぜか無視されてしまうが、コマンドライン
コンパイラではまさに>>109が言う要素数が固定かつ全要素がコンパイル時に計算可能という
特殊な場合に応じた最適化が施され、コンパイル時の計算結果を配列yに書き込むだけで
y = 2 * x を全く計算しないコードが生成されることが、アセンブリ出力から分かる。
IFORT (旧式Intel Fortran) では
mov eax, 3
(中略)
mov DWORD PTR [TEST$X.0.1], 1
mov DWORD PTR [TEST$X.0.1 + 4], 2
mov DWORD PTR [TEST$X.0.1 + 8], eax
mov DWORD PTR [TEST$Y.0.1], eax
mov DWORD PTR [TEST$Y.0.1 + 4], 5
mov DWORD PTR [TEST$Y.0.1 + 8], 7
というコードが生成され、Cの
int t = 3;
*x = 1; *(int *)((char *)x + 4) = 2; *(int *)((char *)x + 8) = t;
*y = t; *(int *)((char *)y + 4) = 5; *(int *)((char *)x + 8) = 7;
に相当する処理になる (CではC流に添字0〜2を使うとして)。xとyに共通する
要素3はレジスタに入れて使い回される。一度も使われない変数xを除去する
最適化はされない。
121: デフォルトの名無しさん [] 2024/03/25(月) 20:38:45.78 ID:0jQlcuCQ(2/2) AAS
IFX (新式Intel Fortran) では
movabsq $21474836483, %rax
movq %rax, TEST$Y(%rip)
leaq TEST$Y(%rip), %rax
movl $7, TEST$Y+8(%rip)
というコードが生成され (IntelのコンパイラなのAT&T記法で読みにくいが)、Cの
*(long long *)y = 0x500000003;
*(int *)((char *)y + 8) = 7;
に相当する処理 (リトルエンディアン環境で) になり、3と5がyに一度に書き込まれる。
いずれにしても、Ruby厨、Haskell厨の浅知恵でFortranに嚙み付いても滑稽なだけwww
122: デフォルトの名無しさん [sage] 2024/03/25(月) 20:46:39.58 ID:trqJ9Q6W(1) AAS
rustのほうがスゲーからfortranは黙っとれ
123: デフォルトの名無しさん [sage] 2024/03/25(月) 21:08:10.53 ID:VkynB6Jg(2/4) AAS
誰にも相手してもらえないのでフォートランがイキル
上下前次1-新書関写板覧索設栞歴
あと 879 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.024s