![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
io.hをincludeするとそのような...
-
0除算して、落ちるプログラムと...
-
io.hをincludeしたプログラムで...
-
C++でアボート(Abort)で処理が...
-
バイナリファイルとソースコー...
-
関数の戻り値による変数の初期化
-
CPUが16bitでも32bitOSでコンパ...
-
fortranでのNaNについて
-
Eclipseの環境設定について
-
Visual C++とVisual C++.NETの違い
-
PICマイコンによる乱数の表示に...
-
コンパイルできない
-
C++ で、「)」が必要 というエ...
-
PC-9801用のフリーな高級言語を...
-
pic16FのコンパイルにCCSのCコ...
-
FORTRAN→Cに翻訳
-
変数(関数)名の頭に_
-
コンパイラについて
-
コンパイラの制限 : ヒープの領...
-
非商用のインテルコンパイラ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
io.hをincludeするとそのような...
-
Eclipseの環境設定について
-
コンパイルできない
-
変数(関数)名の頭に_
-
コンパイラについて
-
PICマイコンによる乱数の表示に...
-
fortranでのNaNについて
-
CPUが16bitでも32bitOSでコンパ...
-
volatile修飾について
-
__extension__
-
関数の戻り値による変数の初期化
-
Delphiの逆コンパイル
-
ABAQUS ユーザーサブルーチン...
-
graph.hがincludeできない
-
コンパイラの制限 : ヒープの領...
-
C言語のワーニングメッセージの...
-
sprintfを用いたフォーマット文...
おすすめ情報