締切済み Fortranについて質問です! 2006/01/23 12:02 Fortranで扱う倍精度実数で「1.0D60」は、1.0×10^60という解釈でいいのですか? 本当始めたばっかりで理解が浅いので…どなたかよろしくお願いします>< みんなの回答 (2) 専門家の回答 みんなの回答 ultraCS ベストアンサー率44% (3956/8947) 2006/01/23 23:46 回答No.2 まあ、認識としてはいいでしょうが、コンピュータの内部では、16進数又は2進数で表現されたその近似値になっています(アーキテクチャで違う)。誤差を議論する場合は非常に重要になります。 浮動小数点の演算では、A=(A/B*B)が成立しないことがあります(大概、右辺が小さくなる)。 なので、お金の計算はしないでください。 通報する ありがとう 0 広告を見て他の回答を表示する(1) TT414 ベストアンサー率18% (72/384) 2006/01/23 17:55 回答No.1 Yes 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発その他(プログラミング・開発) 関連するQ&A fortranでx=1としても0.9..が入る fortranで以下のようなプログラムにてxに1.0^-6を代入し、 その中身を表示しました。 --------------------------------- program test real(8) :: x = 1.0d-6 write(*,*) x write(*,*) x * 1.0d6 write(*,*) int(x * 1.0d6) end program test --------------------------------- しかし、結果は以下のようになり、 0.999999999999999955^-6となってしまいます。 さらに、やっかいなことに10^6倍して 整数型に変換しても0と認識されてしまうのです。 ---------------------------------- $ ./a.exe 9.99999999999999955E-007 1.00000000000000000 0 ---------------------------------- 変数の型も倍精度で宣言し、定数も倍精度(d付き)で 代入しているはずなのですが、なぜこのような現象が 起きるのでしょうか。 ご存知の方いましたら教えて頂けると助かります。 なお、コンパイルはgfortranで行っています。 FORTRANについての質問 FORTRANで次の式のプログラミングを書くという課題がでたのですが、どのようにかけばよいですか?? d~2x/dt~2+a~2x=0 本当にわかりません!!! よろしくお願いします。。。 FORTRANで>> FORTRANで実数係数をもつ任意の3次代数方程式の解の個数を判別する方法が まったく思い付かなく困ってます。ご教授お願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム fortran90 fortran90で、シンプソン1/3 公式による自動積分プログラムを作る際の質問です。例えば円周率を求めるとして精度を10^(-6)までにするにはどうすればよいですか?どーしても10^(-4)が限界です。 Fortranの変数 Fortranの変数の取り扱いに関する質問です。 実数で宣言した変数に 33.3 という数字を読み込ませたのですが, そのまま書式を指定せずに書き込ませると 33.2999992 と表示されました。 これはなぜなのでしょうか。 Fortranの倍精度実数について こんにちは。 現在、Fortran 90でプログラムを作成しています。 その中で、整数の倍精度実数への型変換についての疑問がわきましたので、質問させていただきます。 以下の2つのプログラムで、計算がより速く、より精度よくできるのはAとBどちらなのでしょうか。 実際は下記のプログラムが、ループの中に入っているので少しでも計算時間を短くしたいのです。 よろしくお願いいたします。 program A(毎回dxを足す) ----------------------------- real(8) :: pi, dx real(8), dimension(1000) :: x integer i, j pi=atan(1d0)*4d0 dx=pi/5000d0 x=0d0 j=1 do i=1, 1000 x(i)=x(j)+dx j=i write(*,*)x(i) end do ----------------------------- program B(毎回dx*ループ回数を計算する) ----------------------------- real(8) :: pi, dx real(8), dimension(1000) :: x integer i, j pi=atan(1d0)*4d0 dx=pi/5000d0 x=0d0 do i=1, 1000 x(i)=dx*dble(i) write(*,*)x(i) end do ----------------------------- fortranの整数と実数 fortranに関する質問です. 型宣言を下のように行った上で,計算を行うと dが110ではなく,109と出力されるのですが,なぜでしょうか. dも実数で宣言しておくと110.0000と表示されます. こうなる理由と解決策をぜひお教えください. real a,b,c integer d a=33.0 b=3.0 c=0.1 d = (a/b)/c write(*,*) d FORTRANについての質問です。 最近課題でFORTRANをやっているのです。 サブルーチンのMINVS/D/Q/C/Bというのを使って3×3の行列の逆行列を出力するプログラミングを作っているのですが、うまくできません。 サブルーチンを使うのはほとんどはじめてなのでどう使えばいいのかさえ良くわかっていません。 なにかアドバイスがありましたらお願いします。 Fortranのフォーマット Fortranのフォーマットで、下記のように表示したい場合どうしたらよいのでしょうか?桁落ちしてもかまいません。 実数型(f)で表示した場合、0.が抜けてしまいます。 指数表示はしません。 0.0001 5.4321 1234.5 よろしくお願いします。 数値計算で生じる小さなごみ ある問題を数値的に解こうと思いFortranでプログラムを組んでいるのですが、倍精度の数値計算で以下のような事が起きて困っています。 プログラムの中で A=B-C*D (変数は全て倍精度実数変数) のような代入文があるのですが、 write(*,*) B,C,D とすると、0.250000000000000 0.500000000000000 0.500000000000000 と表示されるのですが、 write(*,*) B-C*D や write(*,*)A では-1.79570984817912D-017 などと表示されます。(この数値に意味はないのでしょうが、同じシチュエーションでは常に同じ値が表示されます) 入力した値の精度外の「誤差」ですが、どこに原因のある問題でしょうか? 因に使っているコンパイラはintelのサイトで入手したフリーの評価版ifc ver.6 でそれにpentium4に最適化するオプションをつけてコンパイルしています FORTRAN90 fortran90で、ファイル出力をフォーマット付きで行いたいのですが、 write(unit,****) のような文で、****の部分のフォーマット指定を マニュアルで入力するのではなく、その場に応じた形で 指定する方法はありますでしょうか? character変数の文字にフォーマット指定の文字列、例えば六つの実数を横一列に書き出す場合を想定して write(char,"(A,I1,A)")"'(",Int,"D13.5)'" とし、 write(unit,char)x,y,z,w,s,t などとするのはできませんでした。 ここでいうintの部分を自動的に変えれるようにしたいのですが 何か策はありますでしょうか? わかりにくい説明ですみませんが宜しくおねがいします。 Fortranについて こんにちは。 山といいます。 Fortranのコードについて誰か知ってたら、教えてほしいのです。 下記の(1)の箇所の意味がどうも理解できないのですが、これってどういう意味 なのでしょうか? ・・・・・・・・・・・・・・・・・・・・・・・・・・ R1=ALOG(D(2,J+1))*EMR+ALOG(D(2,J))*(1.0-EMR) RLOG=ALOG(R) IF(RLOG-R1) 170,180,180 ←(1) 170 I=1 R2=R1 R1=ALOG(D(1,J+1))*EMR+ALOG(D(1,J))*(1.0-EMR) GO TO 190 180 I=2 R2=ALOG(D(3,J+1))*EMR+ALOG(D(3,J))*(1.0-EMR) 190 RR=(RLOG-R1)/(R2-R1) ・・・・・・・・・・・・・・・・・・・・・・・・・・ 分かった方、教えてください。 よろしく。 FORTRANプログラムについてお聞きします。 仕事で1970年代にFORTRAN77で作られた技術計算(発電所の熱精算)プログラムを使っています。(私はプログラムは使っていても、作ったことのない、ほとんど素人です) このプログラムの規模として、総ステップ数が約60kステップ有ります。 このたび、このプログラムをMATLABに移植することになりました。 移植の理由は、FORTRANそのものが古い言語で、機能拡張などのメンテナンスを依頼しているソフト会社には、FORTRANの分かるエンジニアがいなくなったこと、だそうです。 (MATLAB使用は会社の指示です) そこでお聞きしたいのは以下の点です。 1.FORTRANとは、そんなに古い言語になってしまったのか? 2.MATLABはある精度内で収束するように繰り返し計算するようなプログラムに向いているのか? 3.MATLABのネット記事のほとんどが大学関係者ばかり。企業では使われていないのか?だとしたら、その理由は? 4.MATLABの利点と欠点を述べた記事などがあったら紹介して下さい。 宜しくお願いします。 Fortran77 (intel fortran) Fortran77のプログラムをIntel Fortran (ifort v14.0.1)でコンパイルした時、以下のワーニングがでます。 remark #8291: Recommended relationship between field width 'W' and the number of fractional digits 'D' in this edit descriptor is 'W>=D+7'. 100 FORMAT(12E9.3) --------------------------^ 100の書式はREAL*8で宣言された変数を書き出す時に使っています。 これは具体的にはどういう問題について警告しているのでしょうか? 環境はCentOS6.5 32bitにて実行しています。 よろしくお願いいたします。 Fortranの問題です。急いでます>< 問題は以下のとおりです。 もう二問あるのでできればそちらもお願いします>< 氷をビーカーに入れて,ヒーターで熱する実験をしたところ, 氷(水)の温度は,以下のようになった. (左:経過分数 右:温度°C) 0 0 1 1 2 2 3 3 4 4 5 6 6 6 7 6 8 9 9 9 10 12 11 16 12 20 13 24 14 28 15 30 16 32 17 34 18 36 この温度変化の今後の推移を予測するため,最小二乗法を用いて 回帰直線の式を求めよ. ただし,プログラムを実行すれば,キーボードから何も入力しなくても, 回帰直線の式を出力するように作成すること. (配列の初期化をプログラム内で行うこと) 倍精度実数(double precision)を用いて,精度を高めること. 参考:正解は ?.13?????? x + -?.58?????? となる.xxの部分は秘密. FORTRANからJava FORTRAN初心者で理解できずに困っています。。 FORTRANで書かれたプログラムをJavaに変換したいのですが、自分なりにしてみたらエラーエラーエラーでした。 配列が一番間違ってるみたいに思えます。 たとえば、 REAL X(50,50) AX=X(1,MM)-X(1,1) はJavaではどのように書くのですが?? また、参考になりそうなサイトなどあれば教えてください。 どうか、よろしくお願いいたします。 fortranの関数? fortranに関する質問です. あるプログラム例(おそらくfortran77で記述されている) で理解できないところがあり質問しました. BFUNC(S) = S とあるのですが,これはどういう意味なのでしょうか. BFUNCについて調べてもわからず,行き詰っています. プログラム中の後に S = FLOAT(J) / FLOAT(JMAX) E = BFUNC(S) という記述があります. ファンクション関数のようなものかとも 思いましたが,そのような設定に関する記述も特に見当たらず・・・ 何か77特有の組み込み関数とかでしょうか. 情報が少なくて意味不明かもしれませんが, 本当にここ以外では出てきません. また,S,Eともに型宣言等もありません. もしわかる方,おられましたらお教えください. よろしくお願いいたします. FORTRAN の引数について FORTRAN の引数について FORTRANからCへの移植のため解析中なのですが引数の宣言について教えてください。 SUBROUTINEで次のような関数の時、引数の表現はどういった意味を表しているのでしょうか? SUBROUTINE AA(VAL1,VAL2,VAL3,VAL4,*,*,*) CALL AA(VALUE1,-5.D-03,5.D+04,1.D+00,*100,*3,*1) 引数はREAL型でこの時の2~4番目の表現と5番目以降の*付の数字の意味です。 ちなみにCALLは数箇所で呼ばれており、その度に*100以外の部分は宣言が 変わっています。 fortranに関する質問です。 fortranに関する質問です。 100個の整数データが並んでいるdate1.TXTとdata2.TXTがある。この二つのファイルを読み込んで、200個全てのデータを小さい順に並び替え、1行に10個ずつの整数を印字して画面上に出力しなさい。全データの和、平均値、最大値、最小値を求めて出力しなさい。 1、 データファイルはそれぞれ100個の数字が並んでおり、date1.TXTには3桁の数字が5個ずつ20行、data2.TXTは2桁の数字が10個ずつ10桁の型式できにゅうされている。 2、配列を用いる方法でプログラムを作ること。 以上の問題が全く理解できません。 出来れば、詳しく教えていただきたいです。 統計ソフトRで4倍精度の計算はどうするのでしょうか? 初心者ですが、ご教示お願いします。 Fortran などのような4倍精度の計算はRではどうするのでしょうか? 宜しくお願い致します。