フォートランでフォーマット変換する方法とは?

このQ&Aのポイント
  • フォートランで既存のデータを変換する方法について説明します。
  • 元のデータに定数をかけて引いた値を特定のフォーマットで出力する方法を解説します。
  • Microsoft Visual Studio 2008を使用してフォートランでのフォーマット変換を行う手順をご紹介します。
回答を見る
  • ベストアンサー

この場合のフォートランのフォーマットどうすれば?

今もともとあるデータをa倍してb引く値を求めそれを違うフォーマットで書き出したいのですがどういうふうに書けばいいのでしょう? 元のデータ   17346 17371 17420 17450 17409 17327 17289 17276 17237 17225 17277 17344 17365 17304 17224 17204 17223 17209 17195 17245 17274 17285 17321 17301 17302 17352 17355 17368 17408 17438 17428 17338 17300 17356 17378 17375 17350 17285 17251 17234 全て5桁の正のあたいの数値が上には40個しかのせませんでしたが8x5000あります 書き出したいデータ 0.623E-001 0.108E+000 0.851E-001 0.128E+000 0.110E+000 0.125E+000 0.105E+000 0.126E+000 0.107E+000 0.114E+000 0.855E-001 0.834E-001 0.468E-001 0.326E-001 -0.105E-001 0.623E-001 0.108E+000 0.851E-001 0.128E+000 0.110E+000 0.125E+000 0.105E+000 0.126E+000 0.107E+000 0.114E+000 0.855E-001 0.834E-001 0.468E-001 0.326E-001 -0.105E-001 0.623E-001 0.108E+000 0.851E-001 0.128E+000 0.110E+000 0.125E+000 0.105E+000 0.126E+000 0.107E+000 0.114E+000 もとデータの値に定数をかけて引いた値を 空欄2つ(値が負の場合は1つ),値を0.~(小数点3桁まで),10の何乗か(10の2乗ならE+002,10のマイナス100乗ならE-100) というフォーマットで5x8000にしたいのですこのときはフォートランでどう書けばいいのでしょうか。 ソフトはMicrosoft Visual Studio 2008をつかっています。 よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • boogeyman
  • ベストアンサー率35% (163/462)
回答No.1

Visual StudioのFotranは知りませんが、一般的なFortranの文法では… (符号と空白を含む)全体の桁数が12桁、小数点以下が3桁、指数部が3桁ですので、 「E12.3E3」(←全角で記述してます)で良いと思います。

tubotomo62
質問者

お礼

character*30 fileout dimension x(10000) write(*,*)'out put file name' read(*,*)fileout do 100 i=1,10000 x(i)=10/i 100 continue open(10,file=fileout,status='new') do 110 i=1,10000 write(10,1000) x(i) 110 continue 1000 format (' ',e12.3e3) close (10) end こう書いたら 0.100E+002 0.500E+001 0.300E+001 0.200E+001 0.200E+001 0.100E+001 0.100E+001 0.100E+001 0.100E+001 0.100E+001 0.000E+000 0.000E+000 0.000E+000 0.000E+000 0.000E+000 0.000E+000 0.000E+000 0.000E+000 0.000E+000 という感じで指数のマイナスが出ないのですがどうしたらいいのでしょう?

その他の回答 (1)

  • boogeyman
  • ベストアンサー率35% (163/462)
回答No.2

>という感じで指数のマイナスが出ないのですがどうしたらいいのでしょう? 問題は、「x(i)=10/i」ですね。 整数の定数(10)を、整数の変数(i)で割っているので、演算が整数(小数以下切り捨て)になります。 その結果、 X(1) = 10 X(2) = 5 X(3) = 3 X(4) = 2 X(5) = 1 X(6) = 1 : X(9) = 1 X(10) = 1 X(11) = 0 X(12) = 0  : (以下、全てゼロ) となります。 「x(i) = 10./i」、「x(i) = 10/FLOAT(i)」、「x(i) = 10./FLOAT(i)」などに書き換え、実数で演算するようにして下さい。 もし、FLOAT()関数が無ければ、 do 100 i=1,10000 a=i ! (←整数iを実数aに変換) x(i)=10./a ! (←実数で演算) 100 continue と書き換えてください.

tubotomo62
質問者

お礼

なるほどそうなっているのですね。出来ました。ありがとうございます!!

関連するQ&A

  • FortranのFormatについて

    Fortranで数値を出力するときのFormatについて質問です。 数値を小数点を無くして、指数表示で出力したいです。 例えば 0.0025 を 25E-4 と出力するのが希望です。 調べたところ、 『■pe■.■e■』(■は数値)というFormatにすれば、  1番目の値は小数点以上の桁数  2番目の値は数値が入る幅  3番目の値は小数点以下の幅  4番目の値は指数の桁数 ということがわかりました。 『2PE8.3e1』だと 0.0025 は 25.00E-4 と出力されます。 『2PE6.1e1』だと 0.0025 は 25.E-4 と出力されます。 しかし、この小数点を消す方法がどうしてもわかりません。 『2pe6.0e1』と設定してもうまく出力されません。 詳しい方がいらっしゃったらぜひ教えてください。 よろしくお願いします。

  • UNIX フォートラン 数値計算精度

    フォートランでの数値計算精度に関して困っております。 サンマイクロシステムズ社製、UNIX、Solaris10(64bit)において、 下のフォートランプログラム、 IMPLICIT REAL*8(A-H,O-Z) X=1.0D0 A=SIN(X) WRITE(*,100)A 100 FORMAT(F50.40) STOP END を実行させると、 A=0.8414709848078965048756572286947630345821 となり、16桁以降にも数値が出てきます。 これはなぜでしょうか? UNIXコンパイラの特徴なのでしょうか?

  • 浮動小数点数型

    単精度浮動小数点型と倍精度浮動小数点数型、それぞれ値がとりうる範囲を教えてください。 単精度浮動小数点型 負の値は -3.4028235E+38 ~ -1.401298E-45、 正の値は 1.401298E-45 ~ 3.4028235E+38 の範囲の値 倍精度浮動小数点数型 負の値は -1.79769313486231570E+308 ~ -4.94065645841246544E-324、 正の値は 4.94065645841246544E-324 ~ 1.79769313486231570E+308 の範囲の値 とは記述してあるのですが、実際に小数1桁なら整数部はどのくらいの範囲の値がとれるのか、皆目わかりません。 どうか、わかりやすく教えてください。 よろしくお願い致します。

  • visual studio 2008 C# で、値を入れるテキストボッ

    visual studio 2008 C# で、値を入れるテキストボックスを作り、そのテキストボックスに入力できる値を小数点2桁までとするにはどの様にすれば宜しいでしょうか?

  • 以下の問題の解答・解説を教えてください。

    2次関数y=x2乗-2x+aの値が0≦x≦3の範囲で常に負となるよう、定数aの値の範囲を定めなさい。 御回答よろしくお願いいたします。

  • 有効数字について

    最小二乗法の計算をするに当たって有効数字を考えています。もしx=5.00という値が得られたとすると、x^2を考えるとき、やはり5.00×5.00=25.0(3桁)とすべきなのでしょうか?というのも、他のx^2の値が小数点以下第2位まで得られているので、それらを足し算すると小数点以下が第1位までとなってしまうのです。 知識不足なもので恐縮ですがよろしくお願いします。

  • VBのフォーマットで+と-の値をそろえたい

    Visual BASICで値をフォーマット命令を使い、+あり、-ありの値を縦に表示させ、各桁をそろえたいのですが、+の場合は、+を表示しないので、+の値だけ、1桁左詰めで表示されてしまいます。簡単に解消できる方法はありますか? 教えてください。 現在のプログラム  print Format(変数,"###") 今の例 123 -123 希望する表示  123 -123      ブラウザで見ると3と3がそろっていませんが、合わせて書いたつもりです

  • 数のこの問題が全く分かりません

    2次方程式x2乗-(m-4)x+m-1=0が、異なる2つの負の解を もつとき、定数mの値の範囲を求めよ。 という問題です。どなたか詳しく教えてくれる方がいましたら よろしくお願いします。

  • C#のキャストについて(32bit浮動小数点)

    こんにちは。 現在、Visual Studio 2005を使用してC#のプログラムを作成しています。 32bitの浮動小数点のデータを表示しようとしているのですがうまくいきません。 具体的な例としては 0x42F6E9E0  → 123.456789 0x4476E9E0  → 987.654321 のように変換した結果を表したいと考えています。 c言語では int main() { int h = 0x42F6E9D5; float f; f = *(float *)(&h); return 0; } のようにすればfで値(123.45678)が取得できたのですが、 これと同じ事をC#ではどのように書くのでしょうか? ポインタを含んだキャストのやり方がわかりません。 以上よろしくお願い致します。

  • perl 積算の仕方が解らない

    フォートランで作られたデータを、perlで作り直そうと始めました。 なんとか、perlの中で値の計算までは出来たのですが、 下記データの2フィールド目に対して積算の仕方が解りません。 awkでは、awk '{SUM += $2;printf("%s %10.4e\n", $1, SUM)}'でできましたが、 perlで中ではどのようにするのか? 1998-04-20T16:16:00   6.533078e+05 1998-05-01T01:59:00   1.501809e+06 1998-05-05T07:20:00   7.202719e+05 1998-05-05T07:24:00   9.799618e+05 ついでに、御存じでしたら、御教授ください。 awkとperlの計算結果は全く同じにでましたが、フォートランの結果は 下記のように微妙に違ってしまう処がございます。 それは、どうしてでしょうか?     awk,perl の結果    フォートランの結果   フォートランの7ケタの結果  7.202719e+05      7.202718e+05      7.2027181e+05          9.799618e+05     9.799616e+05 9.7996169e+05 以上 よろしくお願い致します。

    • ベストアンサー
    • Perl

専門家に質問してみよう