最終更新日時:
が更新

履歴 編集

function
<cmath>

std::nan(C++11)

namespace std {
  double nan(const char* tagp);
  float nanf(const char* tagp);
  long double nanl(const char* tagp);
}

概要

文字列から quiet NaN へ変換する。

この関数は、パラメータtagpとしてNaNのペイロードを受け取る。これは、診断用の付加情報としてユーザーが任意の値をNaNに持たせるものである。

効果

  • nan("文字列")strtod("NAN(文字列)", (char**)NULL)と等価である
  • nan("")strtod("NAN()", (char**)NULL)と等価である

戻り値

シグナルを発生させないNaNを返す。利用可能であれば、tagpを通じた内容を付加する。

実装がシグナルを発生させないNaNをサポートしていない場合、ゼロを返す。

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdint>

int main()
{
  // シグナルを発生させないNaNを生成する。ペイロードなし
  double result1 = std::nan("");
  // 浮動小数点例外を発生させずにNaN値を持つ変数を整数に変換して出力
  std::uint64_t result1n = 0;
  std::memcpy(&result1n, &result1, sizeof(result1));
  std::cout << result1 << "(" << std::hex << result1n << ")" << std::endl;

  // ペイロード付きのシグナルを発生させないNaNを生成する
  double result2 = std::nan("0xF");
  std::uint64_t result2n = 0;
  std::memcpy(&result2n, &result2, sizeof(result2));
  std::cout << result2 << "(" << std::hex << result2n << ")" << std::endl;
}

出力

nan(7ff8000000000000)
nan(7ff800000000000f)

バージョン

言語

  • C++11

処理系