[過去ログ] 「数学」をプログラミングするには (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
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はベクトル演算に言語仕様レベルで対応しているから、そんなことするはずないだろ。
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 + ...
を近似ではなく厳密に確かめるにはどうしたらいいの
人間が証明できるってことは、有限なアルゴリズムに書き換えられると思うんだけど
の例のように対象は可算無限列
120: デフォルトの名無しさん [] 2024/03/25(月) 20:38:21.53 ID:0jQlcuCQ(1/2) AAS
>>104はVisual Studioでは最適化オプションがなぜか無視されてしまうが、コマンドライン
コンパイラではまさに>>109109(2): デフォルトの名無しさん [] 2024/03/24(日) 23:00:28.05 ID:D7nIPk2H(1) AAS
静的な固定長で最適化できるのは当たり前だから
少なくとも実行時までわからない可変長じゃないとな
が言う要素数が固定かつ全要素がコンパイル時に計算可能という
特殊な場合に応じた最適化が施され、コンパイル時の計算結果を配列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を除去する
最適化はされない。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.042s