読み込み中...

C言語のNaNを5つのステップで理解する

C言語でのNaNの理解と使用について説明している図表 C言語
この記事は約4分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

C言語は数多くの人々が学んだ最初のプログラミング言語であり、その一貫した構文と表現力は、その普及を支えています。

その一方で、初学者が理解するのが難しいとされる特徴の1つが、NaN(Not a Number)という特殊な値です。

今回は、C言語のNaNについて5つのステップで詳しく説明していきます。

●NaNとは

NaNは、”Not a Number”の略で、数値ではないものを表す特別な値です。

○NaNの意味

数値を扱うコンピューターシステムでは、数値が存在しない、あるいは数値として扱えない状況がしばしば発生します。

そういった場合、NaNという特殊な値が利用されます。

○NaNの起源と用途

NaNは、浮動小数点数の計算の結果が数値として定義できない場合に、その結果を表すために用いられます。

例えば、0で割った結果や、負の数の平方根などは数値として定義できないため、その結果はNaNとなります。

●C言語でのNaNの表現方法

C言語では、IEEE 754という浮動小数点数の標準を採用しています。

この標準では、NaNは特定のビットパターンで表現されます。

○表現方法の詳細

IEEE 754において、NaNは指数部が全て1(2進数で11111111111)、かつ仮数部が0でない値で表現されます。

このビットパターンは、通常の数値には現れないため、NaNを明確に表現することが可能です。

●NaNの使用例とサンプルコード

NaNの生成や扱い方についてのサンプルコードを紹介します。

○サンプルコード1:NaNの生成

このコードでは、NaNを生成する方法を紹介しています。

この例では、0.0で0.0を割り、NaNを生成しています。

#include <stdio.h>

int main() {
    double num = 0.0 / 0.0;
    printf("%lf\n", num);
    return 0;
}

このコードを実行すると、出力はnanとなります。

これがNaNの値を表すものです。

○サンプルコード2:NaNと数値の比較

このコードでは、NaNと他の数値を比較する場合の挙動を表しています。

NaNと他の数値を比較した場合、その結果は常に偽となります。

#include <stdio.h>

int main() {
    double num = 0.0 / 0.0;
    printf("%d\n", num == num);
    return 0;
}

このコードを実行すると、出力は0となります。

これはNaN同士の比較が偽であることを表しています。

○サンプルコード3:NaNを含む計算

このコードでは、NaNを含む計算が行われる場合の挙動を表しています。

NaNを含む計算の結果は常にNaNとなります。

#include <stdio.h>

int main() {
    double num = 0.0 / 0.0;
    printf("%lf\n", num + 5);
    return 0;
}

このコードを実行すると、出力はnanとなります。

これはNaNを含む計算結果がNaNになることを示しています。

●NaNを扱う際の注意点と対処法

NaNは特殊な値であり、特定の規則に従って挙動します。

そのため、NaNを扱う際は次の注意点と対処法を理解しておくことが重要です。

○注意点

  1. NaNは他の数値と比較しても常に偽を返す
  2. NaNを含む計算結果は常にNaNになる

○対処法

  1. NaNとの比較には、専用の関数(isnan()など)を使用する
  2. NaNが発生する可能性がある計算は避ける、または適切に処理する

まとめ

今回はC言語のNaNについて解説しました。

NaNは特殊な値で、特定の計算結果が数値として表現できない場合に使用されます。

NaNは他の数値と比較しても偽を返し、NaNを含む計算結果は常にNaNとなるという性質を持つため、これを理解して適切に対応することが求められます。

この記事を通じて、C言語のNaNの扱いについて深く理解できたことを願っています。