BohYoh.comトップページへ  wcstold
C言語 標準ライブラリ アルファベット順索引 ヘッダ別索引 ホームページへ C言語講座のページ

C89  C99  C11  ワイド文字列数値変換関数
wcstold
ヘッダ #include <wchar.h>
形 式 long double wcstold(const wchar_t * restrict nptr, wchar_t ** restrict endptr);
機 能 nptrが指すワイド文字列の最初の部分を、long double型の表現に変換する。
まず始めに、入力文字列を次の三つの部分に分割する。
  第1の部分 … iswspace関数の規定による空白類ワイド文字の並び(空でもよい)。
  第2の部分 … 浮動小数点定数と同様の形式、あるいは、無限大またはNaNを表現する変換対象列。
  第3の部分 … 認識の対象とならないワイド文字の1文字以上の末尾のワイド文字列(入力ワイド文字列の終了を示すナルワイド文字を含む)
次に、変換対象列の部分を浮動小数点数に変換し、その結果を返す。
変換対象列の認識可能な形式は、省略可能な正符号または負符号に、次のいずれか一つが続く形式である。
  • 空でない10進数字の列(この中に小数点ワイド文字が一つだけ含まれていても構わない)に、省略可能な指数部が続くもの。
  • 0xまたは0X、次に空でない16進数字の列(この中に小数点ワイド文字が一つだけ含まれていてもよい)、次に省略可能な2進指数部が続くもの。
  • ワイド文字列INFまたINFINITY。大文字、小文字の違いは無視する。
  • ワイド文字列NANまたははNAN(nワイド文字列opt)。NANの部分の大文字、小文字の違いは無視する。なお、n文字列は以下のように定義される。
    nワイド文字列:
      数字
      非数字
      nワイド文字列 数字
      nワイド文字列 非数字
変換対象列は、入力ワイド文字列中の最初の非空白類ワイド文字で始まる、認識可能な形式の最も長い部分列として定義する。入力ワイド文字列が認識可能な形式でない場合、変換対象列はワイド文字を含まない。
変換対象列が浮動小数点数として認識可能な形式であるとき、最初の数字または小数点ワイド文字(のどちらか最初に現れた方)で始まるワイド文字の並びを浮動小数点定数として解釈する。ただし、以下を除外する。
  • ピリオドの代わりに小数点ワイド文字を用いること
  • 10進浮動小数点数に指数部も小数点ワイド文字も現れなかったとき、あるいは、16進浮動小数点数に2進指数部が現れなかったときに、適切な形の値0の指数部が文字列の最後の数字の後に続くと仮定すること
変換対象列が負符号で始まるとき、その値を負数化したものとして解釈する。
ワイド文字の並びINFおよびINFINITYは、long double型で表現可能である場合、無限大と解釈する。そうでない場合、返却値の型の範囲を超えて大きい浮動小数点定数と同じ規則の動作とする。ワイド文字の並びNANおよびNAN(n文字列opt)は、返却値の型でサポートしている場合、qNaNと解釈する。そうでない場合、long double型の範囲を超えて大きい浮動小数点定数と同じ規則の動作とする。
ワイド文字の並びNANおよびNAN(nワイド文字列opt)は、返却値の型でサポートしている場合、qNaNと解釈する。そうでない場合、変換対象列が認識可能な形式をもたない場合と同じ規則の動作とする。nワイド文字列の意味は、処理系定義とする。endptrが空ポインタでなければ、nptrの値をendptrが指すオブジェクトに格納する。
変換対象列が16進形式であり、FLT_RADIXが2のべき乗の場合、変換結果の値は、正しく丸められる。
"C"ロケール以外では、付加的に文化圏固有の変換対象列の形式を受理してもよい。変換対象列が空であるか、または、認識可能な形式でないとき、変換は行わない。このとき、endptrが空ポインタでなければ、nptrの値をendptrが指すオブジェクトに格納する。
推奨実装仕様
変換対象列が16進形式で、FLT_RADIXが2のべき乗でなく、結果が正確に表現できない場合、その結果は変換前の16進浮動小数点数の値に隣接する適切な内部形式の二つの数のうちの一つでなければならず、さらに誤差がその時の丸め方向に従った符号をもつという条件が満たされなければならない。
変換対象列が10進形式で、かつ、有効けた数がDECIMAL_DIG以下の場合、その結果を正しく丸めなければならない。変換対象列D が10進形式をもち、かつ、有効けた数がDECIMAL_DIGより大きい場合、次に示す三つの条件を満たす10進文字列L およびU を考える。
  • L およびU は隣接する。
  • L およびU の両方がDECIMAL_DIGの有効けた数をもつ。
  • L , D , U について、LDU が成り立つ。
結果は、その時点の丸め方向に従ってL およびU を正しく丸めて得られる(等しい、または、隣接する)値のいずれかでなければならず、更にD に関する誤差がその時点の丸め方向に従った符号をもつという条件が満たされなければならない。
※注:DECIMAL_DIGは、通常は、L およびU を内部的に同じ浮動小数点数値に丸めるのに十分に大きいことが望ましい。そうできない場合、隣接した値に丸める。
返却値 変換が可能であれば変換した値を返し、不可能であれば0を返す。正しい値が表現可能な値の範囲外であるとき、(値の符号に従って)正または負のHUGE_VALFを返し、errnoにはマクロERANGEの値を格納する。正しい値がアンダフローを起こすときは、long double型で最も小さな正規化された正の数以下の絶対値をもつ値を返す。この場合、errnoに値ERANGEを格納するかどうかは処理系定義とする。
補 足
  • 負符号をもつ変換対象列を直接負数に変換するか、対応する符号無しの列から変換した結果を負数化することで変換するかは、規定されない。丸めが正の無限大方向や、負の無限大方向の場合、二つの方法での結果は異なる。いずれの場合も、浮動小数点算術が符号付き0をサポートしている場合、本関数は0の符号を正しく処理することができる。
  • 処理系は、NaNの有効数字部の中に表現する付加情報を決定するためにnワイド文字列を使用できる。


BohYoh.comトップページへ