• ベストアンサー

fortran dlog2

プログラムの中で m = idnint(dlog2(fn)) という式を書いているのですが、コンパイルの際  m = idnint(dlog2(fn)) 1 Error: Function 'dlog2' at (1) has no implicit type とエラーが出てしまいます。dlog2は倍数精度の対数で計算する物ではないのでしょうか?どのように直してよいのか考えたのですが、様々試しても同じエラーの繰り返しです。どなたかわかる方がいらっしゃったら教えて下さい。よろしくお願いします。

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

  • ベストアンサー
回答No.1

http://www.silverfrost.com/manuals/77userguide.pdf のマニュアルの関数一覧の所に*印がついているので http://oshiete1.goo.ne.jp/qa5391750.html にあるような、ANSI規格の関数ではなく、SalFord FTN 77が独自に拡張した関数と思われます。 そういうわけで、例えば底が2で真数が8であるようなものを計算するときには DLOG(8) / DLOG(2)とかやらざるを得ないでしょうね。

528612
質問者

お礼

助言ありがとうございました。底を2でしたいのでご指摘通り真数の対数をdlig(2)で割る形にしたらうまくコンパイルできました。ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

この辺は使っているコンパイラなどもちゃんと書いてほしいところなんだけどね. さておき, ISO の規格には「2を底とする対数」は存在しないので自然対数ないし常用対数を使って計算してください. 素直に割り算で書いてもいいし, 文関数もしくは内部関数で書いても OK だ.

528612
質問者

補足

プログラム言語はfortran95(g95)を使っています。申し訳ありませんが、不安なのでコンパイラを調べるにはどのようにしたらよいのでしょうか?よろしくお願いします。

関連するQ&A

  • fortran sqrtコンパイルエラー

    プログラムを書き直していて以下の様なエラーが出てしまいます。 以前sqrt関数を書いたときは以下の様なエラーは出てこなかったのですが、最近やたらFunctionのエラーがよく出ます。コンパイルに問題があるのでしょうか?自分のコンパイルを調べるにはどうしたらわかるのでしょうか?よろしくお願いします。 In file init.f90:52 rf = sqrt((nx-5)**2+(ny-5)**2+(nz-5)**2) 1 Error: Type of argument 'x' in call to 'sqrt' at (1) should be REAL(4), not INTEGER(4) In file init.f90:52 rf = sqrt((nx-5)**2+(ny-5)**2+(nz-5)**2) 1 Error: Function 'sqrt' at (1) has no implicit type

  • fortran77

    プログラムを作っているのですが、 implicit noneを付けた場合の 関数f(x、y)の宣言の仕方がわかりません。 ググッていくつか出てきたのを試してみたのですが、error文が出てきて、 実行してもうまくいきません。 real x,y,f(x,y) real x,y function f(x,y) real function f(x,y) などです。 implicit noneを付けないとうまくいくのですが・・・・・・ 今後のためによろしくお願いします。

  • fortranについて

    fortran90でコンパイルしたところ ADDITION operation at (1) has different shape on dimension 1 (2/16) というエラーが出てしまいました。これはどういう意味なのでしょうか?わかる方がいらっしゃいましたら教えてください。 お願いします。

  • FORTRAN77(g77)で(D)CBRTがエラーになってしまいます

    FORTRAN77(g77)をVine Linux 4.2で使用しています。 立方根の計算をしたいのですが、コンパイル時に"(D)CBRT"がエラーになってしまいます。 原因・代替策など御助言いただければ幸いです。 なお、(D)SQRTは問題なくコンパイル・実行できました。 以下、テスト用ソースとそのコンパイル時のエラーメッセージです。 [ソース] program a implicit none real*8 n write(*,*)"n= ?" read(*,*)n write(*,*)DCBRT(n) stop end [エラーメッセージ] a.f: In program `a': a.f:6: write(*,*)DCBRT(n) ^ Invalid declaration of or reference to symbol `dcbrt' at (^) [initially seen at (^)] ※こちらの画面ではスペースがうまく入りませんので悪しからず。

  • Fortran90についての質問です。

    Fortran90に関する問題です。 「正の整数mを正の整数nで割った余りrを求める手順を、組み込み関数MOD(m,n)を用いずに、単一の算術式で表せ」 このプログラム文を以下のように作成しました。ファイル名は「amari.f90」にしました。 INTEGER::m,n,f,r REAL::a,k PRINT*,'Input 正の整数' READ*,m,n a=REAL(m) k=a/n f=INT(k) IF(m>0,n>0) THEN r=m-(f*n) PRINT*,'余り=',r END IF END そして、Cygwin画面上で gfortran -o amari.exe amari.f90と打って、コンパイルしようとしたら以下のようなエラー文が出ました。 amari.f90:8.6: IF(m>0,n>0) THEN 1 Error: Syntax error in IF-expression at (1) amari.f90:11.3: END IF 1 Error: Expecting END PROGRAM statement at (1) プログラム文のどこの箇所が間違っているのかを教えていただけませんか?お願いします。

  • fortran プログラミング

    ifortでは問題なくコンパイルできたプログラムを、gfortranで コンパイルしたところ、次のようなエラーが出ました。 DATA ENDWRD /' $END '/ 1 Error: Incompatible types in assignment at (1), CHARACTER(1) to REAL(8) Eが頭文字の変数をdouble precisionにするようにしてあるので、 多分double precisionにcharacterを代入しようとしているのが gfortranでは駄目なんだろうと思いますが、これを解消する方法 があれば教えていただけると助かります。よろしくお願いします。

  • Linuxでプログラミング

    Windows7でVirtualBoxを利用してLinuxを使っています。 そのLinuxでC言語のプログラムをgccでコンパイルしたのですが、 error: stdio.h:No such file or directory In function main': 警告:incompatible implicit declaration of built-in function printf' と表示されます。プログラムは以下のような内容です。 #include<stdio.h> int main(void) { printf("hello,world\n"); return 0; } なぜエラーになってしまうのか分かりません。どうしたらよいのでしょうか? 他に何か必要な情報があれば答えます。よろしくお願いします。

  • fortranのコメントについて

    昨日からfortranを始めた者です。 調べてみると、コメントアウトするには 先頭を"C"または"*"で始めればいい と書いてあるのですが 以下のように実際にやってみると Unclassifiable statement at (1) とエラーが出てしまいます。 (文の先頭に半角6文字のスペースを入れてあります。 コメント行は"c"と"test"の間に5つスペースが入れてあります。) コンパイル文: g95 read.f90 ソース: ______program read ______implicit none ______integer i ______real r ______character(len=4) c c_____test ______print *,"Please input number" ______read *,i,r,c ______print *,i,r,c ______stop ______end もうひとつ、 上のソースをコメント行なしでコンパイルすると通るのですが 全ての実行ファイルがa.exeとして保存されるので 毎回exeファイルが上書きされる形になってしまいます。 この2点の解決方法ご存知の方いらっしゃいましたら 教えてください。お願いします。

  • Fortranのサブルーチン引数について

    他人が作ったFortran(恐らくFortran77)のプログラムで計算をしようとしています。 コンパイルはできるのですが,実行するとエラーが出てしまい困っています。 エラーメッセージは 「forrtl:severe(157):Program Exception - access violation」 となっていて,実行時エラー番号で調べると 「プログラムが適切な参照権を持っていない仮想アドレスに書き込み,または読み取り を行おうとした」と出ていました。 Fortran初心者の自分にはイマイチ意味が判らないのですが,エラーが出た後に サブルーチンのある決まった場所に黄色い矢印が示されます。 そこで今,その部分のサブルーチンを確認しているところです。 前置きが長くなってしまいましたが サブルーチンの中を確認している途中で疑問に思った所が一つあります。 問題のサブルーチンは --------------------------------------- call dbesl(EN,0,BX0,BY0,BI0,BK0)     subroutine dbesl(X,NOR,BX,BY,BI,BK) FN = NOR  ・  ・  ・ 11 NOR = FN               <---この行に黄色い矢印が出る return end --------------------------------------- となっているのですが,サブルーチンを呼び出すcall文の所で 2つ目の引数が『0』となっているのは正しい使い方なのでしょうか? どうもサブルーチン内の計算をしてメインプログラムに引数を返す所が おかしいような気がしています。 因みにメインプログラムに戻る際の"FN"の値は『0』となっていました。 コンパイラはCompaq Visual Fortranを使用しています。 足りない情報は出来るだけ追記していきますので,ご教示宜しくお願いします。

  • fortranでコンパイルできません。

    fortranの数値計算プログラムなんですが、コンパイルすると”GENERIC”という単語でエラーがでてしまいコンパイルできません。エラー内容はこれです『Unimplemented or invalid form of statement at (^) (this is a catchall diagnostic that currently applies to a wide variety of errors, including things like invalid ordering of statements and invalid reference to intrinsic procedure)』 どうすればいいのでしょうか・・・

専門家に質問してみよう