こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

gfortranでlog2(x)を自作関数

お世話になります。
fotran90でlog2(x)を-----ここからのように作成しましたが、以下のエラーとなりコンパイルできません。
環境はLubuntu14.04LTS、gcc version 4.8.2です。

log2.f90:7.19:

write(*,*) x, log2(x)
1
Error: Return type mismatch of function 'log2' at (1) (INTEGER(4)/REAL(4))

-----ここから
program main
integer i
real x

do i=0, 10
x=2.+0.1*real(i)
write(*,*) x, log2(x)
end do

end program main

real function log2(x)
real x
log2=log(x)/log(2.)
end function
-----ここまで

よろしくお願いします。

投稿日時 - 2014-07-04 17:04:42

QNo.8664761

困ってます

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

log2の関数本体が定義される前に、mainで

write(*,*) x, log2(x)

って呼ぶと「宣言が何も無いから、こいつはINTEGERを返すんだな」と思ってコンパイルして行きます。

んで、実際にlog2が定義されている所で

real function log2(x)

って書いてるから

Error: Return type mismatch of function 'log2' at (1) (INTEGER(4)/REAL(4))

って感じで「log2の返り値がINTEGERとREALで一致してないぞ」というエラーになる。

投稿日時 - 2014-07-04 17:22:37

お礼

ご教示ありがとうございます。
メインルーチンでreal x, log2のようにlog2をrealで宣言することで解決しました。

投稿日時 - 2014-07-05 21:33:09

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(1)