• ベストアンサー

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

専門家に質問してみよう