[過去ログ]
「数学」をプログラミングするには (1002レス)
「数学」をプログラミングするには http://mevius.5ch.net/test/read.cgi/tech/1710585705/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
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
108: デフォルトの名無しさん [sage] 2024/03/24(日) 22:52:27.30 ID:IPqW9Eum >>104 固定長の配列を入力に使っている時点で失格 このスレは>>1の例のように対象は可算無限列 http://mevius.5ch.net/test/read.cgi/tech/1710585705/108
120: デフォルトの名無しさん [] 2024/03/25(月) 20:38:21.53 ID: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を除去する 最適化はされない。 http://mevius.5ch.net/test/read.cgi/tech/1710585705/120
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.044s