プチコン3号&BIGまとめWiki

浮動小数点演算におけるInf/NaNの取り扱い

パンくずリスト

人類の歴史は浮動小数点演算例外との戦いの歴史でもあります。もっとも、マニア以外は普通これを気にする必要は有りません。

Inf / NaN について

(これは業界用語なので世間にずっと良い解説が沢山あります。)

Inf / NaN は演算の値が通常の有理数で表わせないときに使用される特別な値です。

Inf は、いわゆる無限大です。

NaN は、結果が決定できないときに使われる値で、 Not A Number の略です。Windowsの電卓で 0/ を計算すると "結果が定義されていません" と急に日本語が出てくるアレです。

SnapCrab_NoName_2015-2-28_16-13-27_No-00.png

プチコンでの処理

プチコンでは、無限大は"inf"、NaNは"nan"と表示されます。なので、FORMAT$等の出力が数値と小数点、符号だけだと思っているとビックリする危険が有ります。

Inf
  • POW(2,1025) のように、1024以上の数と2POWするとInfになる。これは、倍精度浮動小数点の指数の最大値が1023であるため。

Infを整数に変換しようとするとOverflowになります。

NaN

プチコンの数学関数や演算子は基本的に NaN を返さず、返すケースではエラーになります。e.g.) 0/SQR()

一般に、 NaN を含む演算は不思議な結果になります。N#が NaN 、X#が任意の倍精度値であるとき:

  • N# == X# は常に偽になります
    • 特に、N# == N# は偽になります(真では有りません)
  • N# - N# は NaN になります(ゼロでは有りません)

NaNを生成するにはInfを演算するのが早いです。Inf - Inf = NaN等。

Inf / NaN の判定

CLASSIFY()を使えばできます。

数学関数の挙動

  • MIN / MAX は NaN を無視する。
  • Inf または -Inf を整数に変換するとOverflowとなる
  • NaN を整数に変換すると0になる
  • VAL()関数は Inf / -Inf / NaN を認識しない(不正な引数では0を得る)

メニュー 【3号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 1 人がこのサイトを見ています
  • このページはこれまでに 4827 回、本日は 1 回、昨日は 0 回閲覧されました

ページの先頭に戻る

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.070 秒 | このページの最終更新 : 2022/09/20 (火) 12:48:54 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30