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
処理系
- Clang: 3.0 ✅
- GCC: 4.3 ✅
- ICC: ??
- Visual C++: ??