アプリ版:「スタンプのみでお礼する」機能のリリースについて

fortranで,isnanという,変数がNaNか否か判定する関数がありますが,それについて教えていただきたいことがあります.

引数が"NaN"であるときとないときで,計算のやり方で場合わけをして計算をさせたいのですが,知り合いからもらったサンプルプログラムでは,

if(isnan(hikisu))then
NaNの場合の計算
else
 そうでない場合の計算
endif

と書いてありました.これを参考にして計算コードを書いたのですが,digital visual fortranではコンパイルできたのですが,UNIXのコンパイラを使ったらコンパイルできませんでした.
こういう場合は,どのように書いたらよいのでしょうか?
また,isnanの型の宣言は,どのようにして行うのがよいのでしょうか.

A 回答 (4件)

sxf90 って名前のFortran コンパイラを知らなかったので調べてみたところ


これ、スパコン用のコンパイラじゃないですか?
とすると、そのスパコン(SX-8?)でUNIXがうごいているとかいないとか以前に、
浮動小数点数のフォーマットが通常良くあるIEEE-754なのか
って疑問があるんですがどうなんでしょう。

どういうアルゴリズムとロジックでNaNが出てくるプログラムなのか
わかりませんが、NaNというデータ型を使えるのかどうか
ちょっと疑問です。

isnanなる関数の型はまあ
LOGICAL isnan(REAL)
とかじゃなかろうかと思いますが、たぶん自分で関数本体を書かなきゃいけないんじゃないかなあ。
    • good
    • 0
この回答へのお礼

本来,スパコンを使うような計算ではないのですが,エラーの意味が日本語で出てくるという理由で使ってみました.
sxf90のマニュアルを見てみたら,確かにありませんでした.
書き方を練り直してみます.ありがとうございました.

お礼日時:2008/02/15 17:07

> 「IMPLICIT NONE文があるのに、名前isnanの型を明示的に宣言していない。


IMPLICIT NONE文の意味を考えれば当然かと思いますけど。
#2さんも言っていますが、Fortranには、isnanなんていう組込み関数は存在しません。
NaNであるかどうかを調べるためのために、IEEE_ARITHMETICモジュール内にIEEE_IS_NAN関数がFortran 2003で追加されました。
まず、コンパイラのマニュアルを調べてこれらの関数が利用できるか確認する必要があります。
これらの関数が利用できない場合、自分自身との比較(hikisu .NE. hikisu)で判定できる可能性があります。
この方法でもうまくいかない場合は、isnan関数を自作するしかありません。
    • good
    • 0
この回答へのお礼

ありがとうございました.isnanがないとのことでした.
コンパイラのマニュアルを調べて,使える関数を探すか,コード自体を練り直して見ます.

お礼日時:2008/02/15 17:09

多分Link時に未定義エラーになったというパターンだと思います。


また、UNIXのコンパイラというのは g77 か g90 あたりですか?

標準には isnan という組み込み関数はないっぽいので、digital visual Fortranで
コンパイルできたというのは、多分それが拡張として持っていたのでしょう。

それはさておき、Cのちょっとしたプログラムを書いて
Cのライブラリにあるだろう isnan を使ってしまうのが一番手っ取り早いと思います。

FortranプログラムとCプログラムをどうリンクするかは
お使いのシステムのマニュアルを参照してください。

この回答への補足

コンパイラは,sxf90というコンパイラです.それを使ったら,No.1の方のご回答の補足に書いてあるエラーが出てきました.

補足日時:2008/02/15 13:04
    • good
    • 0

どのようなエラーメッセージが出ましたか?


補足にどうぞ。

この回答への補足

「IMPLICIT NONE文があるのに、名前isnanの型を明示的に宣言していない。」というエラーでした.

補足日時:2008/02/15 13:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A