お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-11-15 22:46:18

n-takahashi
メンバ
登録日: 2009-09-15

gfortranの計算結果がおかしい

 水理学の計算をgfortranでおこないたいと思っています。しかし、以下に示したソースコードを実行したところ、答えは両方共1.00000になってしまい、正しい結果になっていません。コンパイル時のオプションか何かで解決する問題なら、教えていただければと思って投稿しました。


C****************************************************
C
C    等流計算
C
C
C*****************************************************

      AN=0.05
      q=10.0
      G=9.8
      i0=0.01
     
     
      h0=(AN**2*q**2/i0)**(3/10)
      hc=(1.1*q**2/G)**(1/3)
      write (6,100) h0,hc
100  format(1H ,'h0 = ',F10.5,5X,'hc = ',F10.5)

      stop
      end

オフライン

 

#2 2010-11-16 09:30:19

hmatsue
アドバイザ
登録日: 2009-03-10

Re: gfortranの計算結果がおかしい

fortranの言語仕様など、全く知らないため、もしかしたら見当違いなことを書いてしまっているかも知れませんが、

n-takahashi による投稿:

AN=0.05
      q=10.0
      G=9.8
      i0=0.01
     
     
      h0=(AN**2*q**2/i0)**(3/10.0)
      hc=(1.1*q**2/G)**(1/3.0)
      write (6,100) h0,hc
100  format(1H ,'h0 = ',F10.5,5X,'hc = ',F10.5)

      stop
      end

だと計算結果が変わるようです。
gfortranおよびfortranの言語仕様を確認の上、ソースコードがやりたいことに合致しているか確認してみてはいかがでしょうか。

オフライン

 

#3 2010-11-16 11:22:45

vine_user
メンバ
From: Tokyo
登録日: 2006-11-15

Re: gfortranの計算結果がおかしい

hmatsueさんが書かれているように、実数型と整数型が混在しているようです。

このままですと、i0も整数型と認識されてしまい、h0 =  +Infinityとなってしまうので、きちんとデータ型を定義した方がいいと思います。

コード:

      implicit none
      real :: AN=0.05
      real :: q=10.0
      real,parameter :: G=9.8
      real :: i0=0.01
      real h0,hc

      h0=(AN**2.*q**2./i0)**(3./10.)
      hc=(1.1*q**2./G)**(1./3.)
      write (*,100) h0,hc
100   format(1H ,'h0 = ',F10.5,5X,'hc = ',F10.5)

      stop
      end

parameterの部分は不要かと思いますが、重力加速度だと思うので、指定してみました。また、数値の部分は小数点を加えるだけで十分です。

下記のサイトなどが参考になるかと。

http://www.nag-j.co.jp/fortran/FI_4.html

オフライン

 

#4 2010-11-16 12:03:13

n-takahashi
メンバ
登録日: 2009-09-15

Re: gfortranの計算結果がおかしい

 vine_userさんのとおりにやったら正しい計算結果になりました。データ型を指定することが必要だったのですね。fortranについては勉強を始めたばかりなので有難うございました。

オフライン

 

Board footer

Powered by FluxBB