「数学」をプログラミングするには

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2024/03/16(土) 19:41:45.98ID:nuwGv9us
たとえば、プログラミングで

π/4 = 1 - 1/3 + 1/5 - 1/7 + ...

を近似ではなく厳密に確かめるにはどうしたらいいの
人間が証明できるってことは、有限なアルゴリズムに書き換えられると思うんだけど
2024/03/23(土) 17:05:10.16ID:O64Y227M
>>76
配列なんていう間違った考えをするからそのように失敗する
正しくイテレータと捉えれば自然数もそこからの写像も扱える
78デフォルトの名無しさん
垢版 |
2024/03/23(土) 17:30:00.10ID:g/HfMmmn
>>77
イタレータは配列の各要素を走査しながら操作する道具、つまり写像を逐次的に作っていくための操作手順を表したものに過ぎない。
2024/03/23(土) 18:46:13.42ID:O64Y227M
>>78
イテレータとは何かを学び直しなさい
それは配列に対するイテレータ
イテレータに配列なんていうものは必要ない
2024/03/23(土) 19:02:25.28ID:/RLS51iM
イテレータなんぞプログラミング側の都合でしかないやろw
数学のどこにイテレーションって概念があるの?
もとは集合の話だっけ? 集合のどこにイテレータ出てくる?
2024/03/23(土) 19:08:33.11ID:HOjMmtFw
配列こそプログラミングやコンピュータ都合の邪道なものだね
配列は有限しか扱えないから不要

イテレータは自然数イテレータだけでなく例えばフィボナッチイテレータなど無限を扱える
イテレータは数学とも相性がいい
82デフォルトの名無しさん
垢版 |
2024/03/23(土) 20:19:21.71ID:g/HfMmmn
>>78 >>81
イタレータの意味を分かっているのか。反復子だぞ。反復子が写像のわけないだろ。
写像を実行するための操作手順でしかない。

反復子の遅延評価により無限の操作手順をコードとして書くことはできても、実際には
実行が途中で終わるので無限を扱えるわけではなく、有限を無限に見せている構文上の
まやかしに過ぎない。
2024/03/23(土) 21:27:18.93ID:u0/iUo5p
>>82
あんさんボケとるな
ここまで読んで反復子(iterator)が写像(map)と書いているのは君しかいない
他の人たちは以下を正しく理解して書込みしている

>>72
>> だからmapの入力も出力もイテレータが使われる
84デフォルトの名無しさん
垢版 |
2024/03/23(土) 22:23:29.86ID:g/HfMmmn
>>83
>>74はごっちゃにしているようだが。

反復子を使っても遅延評価をしなければ、mapを多段に使った場合の効率は良くならない。
例えば、C++ STLのtransformがそう。

>>70のような配列のmap関数でも、引数fとして複数の関数の合成関数のポインタを渡せば、
効率は良くなる。あるいは、引数fとして関数ポインタの配列を受け入れるようなmap関数を
書いても良い。
85デフォルトの名無しさん
垢版 |
2024/03/23(土) 22:27:51.62ID:g/HfMmmn
>>83
>>74はごっちゃにしているようだが。

反復子を使っても遅延評価をしなければ、mapを多段に使った場合の効率は良くならない。
例えば、C++ STLのtransformがそう。

>>70のような配列のmap関数でも、引数fとして複数の関数の合成関数のポインタを渡せば、
効率は良くなる。あるいは、引数fとして関数ポインタの配列を受け入れるようなmap関数を
書いても良い。

そもそもCでmap関数を書けるかという話だから、書けるという回答で何の問題ないだろ。
2024/03/23(土) 22:32:25.46ID:/PCiT6cf
>>84
根本的な勘違いをしているようなのでアドバイス
イテレータは抽象的な概念に過ぎないのでそこに遅延評価などという話は一切出てこない
イテレータの実装の一つに遅延評価の有無を持ち出すケースがあるようだがそんな特殊などうでもいい話をしても意味がない
87デフォルトの名無しさん
垢版 |
2024/03/23(土) 22:36:40.17ID:g/HfMmmn
>>86
そんなことは分かっている。>>72に言ってくれ。
2024/03/23(土) 22:43:57.14ID:/PCiT6cf
>>72は正しいよ
2024/03/23(土) 22:56:10.99ID:sCrZk0I5
iteratorは可算無限を扱える
mapは入力も出力もiterator

例えば
2倍にするというmapに対して
入力を自然数のiteratorとすると
出力は偶数の自然数のiteratorとなる

これだけの話だろ
>>82の人だけ理解できてないようだが
90デフォルトの名無しさん
垢版 |
2024/03/24(日) 10:28:13.06ID:8D2Drt3S
でもC言語は圏論じゃないよね
2024/03/24(日) 10:35:26.13ID:GMGvnUD/
20年前の議論草
92デフォルトの名無しさん
垢版 |
2024/03/24(日) 11:18:58.82ID:dsXIuIWc
それは間違い
FORTRANが今もなお科学技術計算に使われてる
2024/03/24(日) 11:32:06.58ID:GMGvnUD/
言葉のお遊びwww
94デフォルトの名無しさん
垢版 |
2024/03/24(日) 11:34:31.12ID:yjeBPx06
集合論はラッセルのパラドックスで矛盾した
だから集合と写像に基づくC言語やRubyは数学を扱うのに不適切
よってハスケルなどは圏論に基づくから関数型言語が正解
95デフォルトの名無しさん
垢版 |
2024/03/24(日) 11:46:51.50ID:BUlt442E
プログラム言語は機械語→アセンブラ→高級言語 と進化してきたが、高級言語にも高級度の段階があって
gotoジャンプ→構造化ループ→map→ベクトル演算 という序列になっている。

y = x.map(i => 2 * i) のように冗長な記述をしなければならない言語よりは、ベクトル演算で y = 2 * x と
すっきり書けるFortranの方が進化している。
2024/03/24(日) 14:10:14.72ID:S5dROhf0
まったくトンチンカンな話してんな
プログラミング言語にmapがあったところでそれで数学ができるわけじゃないだろ
何を解きたいんだよ?
定理証明か?仕様記述か?
ド文系のふわっとした思考やめな
2024/03/24(日) 14:30:14.37ID:rmOZT0bw
>>95
それはarrayを入出力とするmapだね
それは遅延評価もできず可算無限列を扱えない古い劣化タイプ
一方でiteratorを入出力とするmapはarrayだけでなく可算無限列など任意のものを対象にできる
98デフォルトの名無しさん
垢版 |
2024/03/24(日) 14:58:03.83ID:iK6Wk5rB
この完全なデタラメな話をここまで長々とする気力がどこから湧いてくるのかがわからない
2024/03/24(日) 15:27:25.02ID:pjttU2nz
所有権を複製したいんやろw
2024/03/24(日) 15:28:49.95ID:4Iqs5Xee
>>97
昔は配列に対するmapしか無かったから、遅延評価できず、有限列しか扱えず、中間生成配列のムダなど、悲惨だったな
今はイテレータに対してmapその他を適用するプログラミング言語が増えたので、扱える対象が広がるとともに、効率も良くなったな
2024/03/24(日) 16:53:04.14ID:GMGvnUD/
そんな低レベルの話してるんとちゃうんやで
102デフォルトの名無しさん
垢版 |
2024/03/24(日) 18:55:43.95ID:qF9URZLj
そもそも高階関数のmapは、数学の集合論における写像のことではない
103デフォルトの名無しさん
垢版 |
2024/03/24(日) 19:36:33.57ID:WsANI0D/
ゴミみたいな話しかしてないな、定理証明系とかの話をしているのかと思ったら
104デフォルトの名無しさん
垢版 |
2024/03/24(日) 20:58:49.18ID: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はベクトル演算に言語仕様レベルで対応しているから、そんなことするはずないだろ。
105デフォルトの名無しさん
垢版 |
2024/03/24(日) 20:59:19.43ID: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始まりなのは非効率なのかと思ってしまうが…)
106デフォルトの名無しさん
垢版 |
2024/03/24(日) 20:59:35.15ID:BUlt442E
インタプリタのRubyや、配列っぽく見える[1, 2, 3]がリンクリストのHaskellが効率を
云々するのは馬鹿げているな。
107デフォルトの名無しさん
垢版 |
2024/03/24(日) 21:02:48.75ID: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;
2024/03/24(日) 22:52:27.30ID:IPqW9Eum
>>104
固定長の配列を入力に使っている時点で失格
このスレは>>1の例のように対象は可算無限列
109デフォルトの名無しさん
垢版 |
2024/03/24(日) 23:00:28.05ID:D7nIPk2H
静的な固定長で最適化できるのは当たり前だから
少なくとも実行時までわからない可変長じゃないとな
110デフォルトの名無しさん
垢版 |
2024/03/24(日) 23:11:46.55ID: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; に変わるだけだぞ。
2024/03/24(日) 23:42:53.58ID:+hE4ud6c
入力対象は>>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.05ID:20JdvYau
写像型言語は無いから無理やろ
2024/03/25(月) 08:05:29.65ID:S04445Yl
しょうもない算法や文法を力説されても
数理論理を知らん高卒なんやろか
114デフォルトの名無しさん
垢版 |
2024/03/25(月) 09:05:37.14ID:KQK4URb5
集合論はラッセルのパラドックスがあるからまちがい
選択公理もバナッハタルスキーのパラドックスがあるからまちがい
圏論こそ数学の基礎
2024/03/25(月) 09:20:11.31ID:yJIwIJvC
そういう何が一番とか中二思考やめようや
2024/03/25(月) 09:20:53.71ID:VkynB6Jg
アホ参上
117デフォルトの名無しさん
垢版 |
2024/03/25(月) 10:25:12.12ID:VsfGDznC
圏論型プログラミングってないの?
2024/03/25(月) 18:22:08.56ID:OU4hWxvG
集合は悪くないがそれを内包表記で定義するのが悪い
イテレータを内包表記っぽく書けるやつは
内包表記を使わない書き方もできる保証があるから良いけど
119デフォルトの名無しさん
垢版 |
2024/03/25(月) 19:35:21.63ID:Yjyc3ZYI
Pythonには内包表記はあっても外延表記はないから集合論はできないよ
120デフォルトの名無しさん
垢版 |
2024/03/25(月) 20:38:21.53ID:0jQlcuCQ
>>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.78ID:0jQlcuCQ
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
2024/03/25(月) 20:46:39.58ID:trqJ9Q6W
rustのほうがスゲーからfortranは黙っとれ
2024/03/25(月) 21:08:10.53ID:VkynB6Jg
誰にも相手してもらえないのでフォートランがイキル
2024/03/25(月) 21:21:08.93ID:VkynB6Jg
フォートランは行列、有限要素法のライブラリィ呼ぶだけ、独自のコードなんか書かないw
125デフォルトの名無しさん
垢版 |
2024/03/25(月) 21:23:38.32ID:DOdK3gDR
数学をプログラミングするには、プログラマが数学の必要があるのでは?
2024/03/25(月) 21:32:48.72ID:VkynB6Jg
プログラマは数学である必要がある
2024/03/25(月) 22:22:52.88ID:OU4hWxvG
ギャンブルなら敗者が金を振り込めば秩序が戻るのだが
金を振り込んでしまう人がここにはいないので
128デフォルトの名無しさん
垢版 |
2024/03/25(月) 23:24:59.56ID:77HfiJgP
>>117
圏論型と言えるか分らんが、圏論が注目されたのは副作用の問題を圏論のモナドで表現できるということでHaskellに採用されたのがきっかけっぽい。

今は非可換確率論を圏論で表現すれば意識がどうやって生まれるのかの研究に使えるって話がある。
意識が生まれる謎が解ければAIに意識を持たせられる。
2024/03/26(火) 02:09:58.19ID:bsMEvYma
意識は数学かwww
2024/03/26(火) 11:17:19.23ID:ZLsRjAqD
計算機だからなぁ
2024/03/26(火) 15:57:26.17ID:bsMEvYma
戻らないだろ、刑務所行き
>ギャンブルなら敗者が金を振り込めば秩序が戻るのだが
132デフォルトの名無しさん
垢版 |
2024/03/26(火) 17:42:12.34ID:0A2fpKMf
>>126 日本語おかしい
2024/03/26(火) 17:56:53.22ID:bsMEvYma
>>132
125に言え
2024/03/27(水) 18:25:48.23ID:sRZ89+IF
コンプライアンス的には絶対に違反しないブレないスタイルの方が楽だな
中庸とかいうのは数学的にも意味のない言葉
の筈だけど
2024/03/27(水) 20:27:56.36ID:NpBSIV2x
>>126
ガイジか?
プログラマ→職業
数学→学問分野
日本語勉強し直すか死ねよ
2024/03/27(水) 21:11:20.21ID:xckWJWeo
きっちりした仕様決め無しで「プログラミング」できるわけないだろうに
なんで過疎ってる5chのさらに過疎板でこんな板違いスレ何度も書き込むやつがいるんだよ
「プログラムを作る人」じゃないよな
2024/03/27(水) 21:40:20.83ID:ucDYKmHx
>>135
125へ言えよ、キチガイ
2024/03/27(水) 21:56:27.68ID:sRZ89+IF
ラッセルは作る人というより脆弱性を発見する人のように見える
2024/03/27(水) 22:02:37.43ID:Fy0R0co2
頭の悪さがポエム書かせるんやろなこれ
2024/03/28(木) 06:44:57.06ID:RNwVIlzh
>>137

ガイジか?
141デフォルトの名無しさん
垢版 |
2024/03/28(木) 08:12:08.80ID:WD+w6k7S
意識は非可換だってどこかで聞いたな
現代数学は可換理論しか扱えないが、量子力学は非可換だから、意識=量子力学ってことになる
意識が非決定論なのは量子力学では状態が重ね合わせであることに起因する
したがって意識の問題を解決するには量子コンピュータが必須となる
2024/03/28(木) 10:32:09.67ID:vnZC0FK8
>>140
キチガイ
2024/03/28(木) 10:42:18.73ID:7o0NRrCR
借金取りは見かけ上は極めて非決定的にふるまうが
それでも純粋に合理的な行動しかしない存在とされているので意識の問題がない
2024/03/28(木) 11:41:03.24ID:/R48rPWi
>>141
月刊ムーおすすめ
2024/03/28(木) 11:51:30.64ID:vnZC0FK8
>>141
意識はサイコロを振らない
146デフォルトの名無しさん
垢版 |
2024/03/28(木) 19:38:54.13ID:IFE49MQl
>>126
小学校からやり直せ
2024/03/28(木) 20:47:12.01ID:vnZC0FK8
>>146
アスペ
2024/03/28(木) 20:52:41.71ID:8WuDpFG2
ポエマーさんはポエム板にでも行けよ
統失なら病院のほうがいいかな
2024/03/29(金) 07:29:41.84ID:Gq7mALgF
ゲーデルの不完全性定理で完全に否定されているだろ
プログラムは不完全性では動かせない
2024/03/29(金) 07:35:35.46ID:wkwvmDXj
>>149
月刊ムーおすすめ
2024/03/29(金) 10:11:08.83ID:vNZyJemM
不完全ではなく無定義語で挫折する人がいる
無定義語の定義を特定できないと命題を肯定も否定もできない説
日常生活で出てくる
2024/03/29(金) 14:56:43.34ID:hQjfrr6D
>>149
ガイジか?
ゲーデルの不完全性定理はそんなことについて言及してないぞ
2024/03/31(日) 01:25:08.99ID:GMj391lI
数列の概念がない奴でも無限級数の意味は分かるんだよね
ハードルが低いせいで基礎知識の共有が難しい
154デフォルトの名無しさん
垢版 |
2024/03/31(日) 02:04:57.22ID:XOErjovU
無限級数はトンデモ
物理に現れるのは二次級数まで
2024/03/31(日) 06:02:59.68ID:954vZkOe

数学が何がわかってないやつの典型
虚数もあるとかないとか騒いでるタイプ
156デフォルトの名無しさん
垢版 |
2024/03/31(日) 11:13:53.85ID:/9ZsX08L
ほほう
君は、数学が何かわかっているのかネ?
2024/03/31(日) 11:29:58.51ID:GMj391lI
言語に依存しない数学的オブジェクトの存在が保証されれば
表現を(統一するために)訂正させる仕組みを正当化しやすくなる
2024/03/31(日) 11:41:19.45ID:dM7Inut1
意味不明な事を口走るおっさん
2024/03/31(日) 12:44:19.68ID:va6HO9e1
「プログラム技術」板で「数学」がどうのこうの語ってるのがもう頭悪いというか頭おかしい
プログラムも数学もできない、掲示板の使い分けもできない知的障害
160デフォルトの名無しさん
垢版 |
2024/03/31(日) 15:25:06.37ID:wx8Fg1tF
>>154
数学と物理はなんの関係もないぞ
数学ってZF(C)公理系を絶対ルールとするパズルゲームでしかないから
2024/03/31(日) 16:25:54.15ID:GMj391lI
絶対にルール追加しないのは
ルール追加のふりをしてバックドア設置されるリスクを回避してるんだろう
2024/03/31(日) 16:55:10.67ID:dM7Inut1
馬鹿参上
>数学ってZF(C)公理系を絶対ルールとするパズルゲームでしかないから
163デフォルトの名無しさん
垢版 |
2024/03/31(日) 17:15:24.42ID:wup1S0Wx
物理に三次以上の級数が出てくるソースはよ
2024/03/31(日) 17:23:31.92ID:dM7Inut1
コンピュータは0と1だけで遊ぶゲームwww
2024/03/31(日) 17:28:42.81ID:954vZkOe
まじこのスレやべーなw
キチガイ率高い
2024/03/31(日) 17:38:37.31ID:dM7Inut1
意味不明www
>物理に現れるのは二次級数まで
2024/03/31(日) 18:06:40.04ID:954vZkOe
ただし>>160 は支持するぞ
公理系を何にするかは議論があるだろうが推論パズルゲームってところは正しい
2024/03/31(日) 18:08:00.44ID:kVwrIFTx
プログラム組めない雑魚ほどなにか深遠そうな理論めいたものを言おうとするよな
大したこと言えないんだから黙ってればいいのに
169デフォルトの名無しさん
垢版 |
2024/03/31(日) 18:44:49.29ID:ToTjh3N9
>>168
自分の学が無いのを他責にするなよ
2024/03/31(日) 20:45:23.72ID:bt2k8y8v
学があったらポエム書かんやろw
アホ文系の血が騒ぐからポエムに活路見出すんよね?
171デフォルトの名無しさん
垢版 |
2024/03/31(日) 20:48:04.91ID:52brzQwH
>>168
ゲーデルの不完全性定理、わかる?
172デフォルトの名無しさん
垢版 |
2024/03/31(日) 20:50:54.92ID:ckXISkGH
バブルソートで長さnのリストがソート済みになることをnに関する数学的帰納法で示すコードを書いて下さい
2024/03/31(日) 21:07:09.32ID:zVzgI3KY
構成論理でしかない帰納法は逃げ
背理法をプログラミングできてこそ真の数学プログラマ
2024/03/31(日) 22:17:11.33ID:dM7Inut1
>>167
自己紹介乙
>キチガイ率高い
175デフォルトの名無しさん
垢版 |
2024/03/31(日) 22:21:08.19ID:HimKkZni
数学一般をプログラムするのはきつそうだけど、>>1の内容くらいならMathematicaとかでできるのでは
2024/03/31(日) 22:38:47.01ID:GMj391lI
iterableがソート済みならばfilter(function,iterable)もソート済みである
これが活路か?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。