トップページ > プログラム > 2014年06月29日 > eLJ+YA5h

書き込み順位&時間帯一覧

23 位/189 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000002000000001003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
くだすれFORTRAN(超初心者用)その6

書き込みレス一覧

くだすれFORTRAN(超初心者用)その6
518 :デフォルトの名無しさん[sage]:2014/06/29(日) 12:17:10.06 ID:eLJ+YA5h
ポインタが表に出ない(もちろん POINTER は除く)、
配列長と次元が暗黙的に持てることは評価できると思うんよ
matlab/octave に勝るかというと微妙だけど(移植性くらい?

>>511
ソースコード> このループは順番ぐちゃっても大丈夫です
処理系> なら並列実行しても同じだよね!
という発想なので、そういう副作用も考慮しなきゃダメ

>>517
確か x86_64 は SSE の存在を仮定していいはず
まぁ x86 も SSE/AVX も quad precision floating-point の直接演算は無い
くだすれFORTRAN(超初心者用)その6
519 :デフォルトの名無しさん[sage]:2014/06/29(日) 12:46:18.15 ID:eLJ+YA5h
> C++なら行列演算クラスライブラリ作って、演算子オーバーロード使えば終わりじゃん。
> まさか、行列積が「・」でできると言うんじゃないだろな?

冗長だけど、〜すれば終わり、程度には書けますぜセンセー。

function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )

y = matmul(A, x)
end function
!----====----====----====----====----====----====----====
program test

interface operator(.dot.)
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
end function
end interface
double precision :: A(2,2), x(2,2), y(2,2)

A = reshape( (/1.D0, 1.D0, 1.D0, 1.D0/), (/2,2/) )
x = reshape( (/1.D0, 3.D0, 2.D0, 4.D0/), (/2,2/) )

y = A .dot. x

write (*, '(2F8.3)'), transpose(A); print *
write (*, '(2F8.3)'), transpose(x); print *
write (*, '(2F8.3)'), transpose(y)
end
くだすれFORTRAN(超初心者用)その6
529 :デフォルトの名無しさん[sage]:2014/06/29(日) 21:46:47.56 ID:eLJ+YA5h
はいはいソーデスネーでっかい一時領域作ってなにしてんでしょーねorz

pure で elemental とゆーと配列を引数に放り込むとその全要素に
関数定義された処理が適用される、各処理は独立なのでまとめるなり
並列化なりをコンパイラーに期待、かな。演算子全然関係ないしorz

過去のシサンガーとかもう辛いだけ。
どこまでも未来に生きてください、Fortran スレになんか戻らないでください。

>>521
出力の順序だけ重要ならバッファして後から並べ替えるとか
浮動小数点演算的に結果を変えられないなら仕方ないかもだが

だって人口少ないし交流少ないし機会もないし意味すらないかもしれない、
たまに発言すれば馬鹿にされるから凄い人しか残らないわけで。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。