
fortranで,isnanという,変数がNaNか否か判定する関数がありますが,それについて教えていただきたいことがあります.
引数が"NaN"であるときとないときで,計算のやり方で場合わけをして計算をさせたいのですが,知り合いからもらったサンプルプログラムでは,
if(isnan(hikisu))then
NaNの場合の計算
else
そうでない場合の計算
endif
と書いてありました.これを参考にして計算コードを書いたのですが,digital visual fortranではコンパイルできたのですが,UNIXのコンパイラを使ったらコンパイルできませんでした.
こういう場合は,どのように書いたらよいのでしょうか?
また,isnanの型の宣言は,どのようにして行うのがよいのでしょうか.
No.3ベストアンサー
- 回答日時:
sxf90 って名前のFortran コンパイラを知らなかったので調べてみたところ
これ、スパコン用のコンパイラじゃないですか?
とすると、そのスパコン(SX-8?)でUNIXがうごいているとかいないとか以前に、
浮動小数点数のフォーマットが通常良くあるIEEE-754なのか
って疑問があるんですがどうなんでしょう。
どういうアルゴリズムとロジックでNaNが出てくるプログラムなのか
わかりませんが、NaNというデータ型を使えるのかどうか
ちょっと疑問です。
isnanなる関数の型はまあ
LOGICAL isnan(REAL)
とかじゃなかろうかと思いますが、たぶん自分で関数本体を書かなきゃいけないんじゃないかなあ。
本来,スパコンを使うような計算ではないのですが,エラーの意味が日本語で出てくるという理由で使ってみました.
sxf90のマニュアルを見てみたら,確かにありませんでした.
書き方を練り直してみます.ありがとうございました.
No.4
- 回答日時:
> 「IMPLICIT NONE文があるのに、名前isnanの型を明示的に宣言していない。
」IMPLICIT NONE文の意味を考えれば当然かと思いますけど。
#2さんも言っていますが、Fortranには、isnanなんていう組込み関数は存在しません。
NaNであるかどうかを調べるためのために、IEEE_ARITHMETICモジュール内にIEEE_IS_NAN関数がFortran 2003で追加されました。
まず、コンパイラのマニュアルを調べてこれらの関数が利用できるか確認する必要があります。
これらの関数が利用できない場合、自分自身との比較(hikisu .NE. hikisu)で判定できる可能性があります。
この方法でもうまくいかない場合は、isnan関数を自作するしかありません。
ありがとうございました.isnanがないとのことでした.
コンパイラのマニュアルを調べて,使える関数を探すか,コード自体を練り直して見ます.
No.2
- 回答日時:
多分Link時に未定義エラーになったというパターンだと思います。
また、UNIXのコンパイラというのは g77 か g90 あたりですか?
標準には isnan という組み込み関数はないっぽいので、digital visual Fortranで
コンパイルできたというのは、多分それが拡張として持っていたのでしょう。
それはさておき、Cのちょっとしたプログラムを書いて
Cのライブラリにあるだろう isnan を使ってしまうのが一番手っ取り早いと思います。
FortranプログラムとCプログラムをどうリンクするかは
お使いのシステムのマニュアルを参照してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++でアボート(Abort)で処理が...
-
0除算して、落ちるプログラムと...
-
Visual C++とVisual C++.NETの違い
-
io.hをincludeするとそのような...
-
PICマイコンによる乱数の表示に...
-
ABAQUS ユーザーサブルーチン...
-
C++ で、「)」が必要 というエ...
-
コンパイルできない
-
CPUが16bitでも32bitOSでコンパ...
-
ファイルの開き方
-
あるプログラムのコマンドライ...
-
正しい五十音順について
-
65536は2の何乗なのでしょうか?
-
VBAにてメール作成した際、一部...
-
VBAで仕様書は書きますか?
-
Vba UserFormを前面に出す方法...
-
寿命
-
COBOLでBLOCK CONTAINS句につい...
-
OS入ってる機器のソフト・アプ...
-
変化させるセルが変化しない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
io.hをincludeするとそのような...
-
CPUが16bitでも32bitOSでコンパ...
-
graph.hがincludeできない
-
ABAQUS ユーザーサブルーチン...
-
Visual C++とVisual C++.NETの違い
-
Eclipseの環境設定について
-
変数(関数)名の頭に_
-
fortranでのNaNについて
-
PICマイコンによる乱数の表示に...
-
コンパイラについて
-
バイナリファイルとソースコー...
-
コンパイラの制限 : ヒープの領...
-
コンパイルできない
-
移植性の高いmakefileの作成
-
何も書いて無いのに警告が出る...
-
C/C++のインラインアセンブラに...
-
FORTRANとC++の連動について
おすすめ情報