Skip to content

Latest commit

 

History

History
75 lines (59 loc) · 2.07 KB

nanf.md

File metadata and controls

75 lines (59 loc) · 2.07 KB

nan

  • cmath[meta header]
  • std[meta namespace]
  • function[meta id-type]
  • cpp11[meta cpp]
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;
}
  • std::nan[color ff0000]
  • std::uint64_t[link /reference/cstdint/uint64_t.md]
  • std::memcpy[link /reference/cstring/memcpy.md.nolink]
  • std::hex[link /reference/ios/hex.md]

出力

nan(7ff8000000000000)
nan(7ff800000000000f)

バージョン

言語

  • C++11

処理系