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

C89  C99  C11  文字列変換関数
strtold
ヘッダ #include <stdlib.h>
形 式 long double strtold(const char *nptr, char **endptr);
機 能 nptrが指す文字列の最初の部分を、long double型の表現に変換する。
まず始めに、入力文字列を次の三つの部分に分割する。
  第1の部分 … isspace関数の規定による空白類文字の並び(空でもよい)。
  第2の部分 … 変換対象列。浮動小数点定数と同様の形式の文字の並び、C99 C11  あるいは無限大またはNaNを表現する文字の並び
  第3の部分 … 認識の対象とならない文字の1文字以上の末尾の文字列(入力文字列の終了を示すナル文字を含む)
次に、変換対象列の部分を浮動小数点数に変換し、その結果を返す。

変換対象列の認識可能な形式は、省略可能な正符号または負符号に、次のいずれか一つが続く形式である。
  • 空でない10進数字の列(この中に小数点文字が一つだけ含まれていても構わない)に、省略可能な指数部が続くもの。ただし、指数部に浮動小数点接尾語があってはならない。
  • C99 C11 0xまたは0X、次に空でない16進数字の列(この中に小数点文字が一つだけ含まれていてもよい)、次に省略可能な2進指数部が続くもの。
  • C99 C11 INFまたINFINITY。大文字、小文字の違いは無視する。
  • C99 C11 NANまたははNAN(n文字列opt)。NANの部分の大文字、小文字の違いは無視する。なお、n文字列は以下のように定義される。
    n文字列:
      数字
      非数字
      n文字列 数字
      n文字列 非数字
変換対象列は、入力文字列中の最初の非空白類文字で始まる、認識可能な形式の最も長い部分列として定義する。入力文字列が認識可能な形式でない場合、変換対象列は文字を含まない。
変換対象列が浮動小数点数として認識可能な形式であるとき、最初の数字または小数点文字(のどちらか最初に現れた方)で始まる文字の列を浮動小数点定数として解釈する。ただし、以下を除外する。
  • ピリオドの代わりに小数点文字を用いること
  • 10進浮動小数点数に指数部も小数点文字も現れなかったとき、C99 C11  あるいは、16進浮動小数点数に2進指数部が現れなかったときに、小数点が文字列の直後にあると仮定されること
変換対象列が負符号で始まるとき、その値を負数化したものとして解釈する。
C99 C11 文字の並びINFおよびINFINITYは、返却値の型で表現可能である場合、無限大と解釈する。そうでない場合、返却値の型の範囲を超えて大きい浮動小数点定数と同じ規則の動作とする。また、文字の並びNANおよびNAN(n文字列opt)は、返却値の型でサポートしている場合、qNaNと解釈する。そうでない場合、変換対象列が認識可能な形式をもたない場合と同じ規則の動作とする。
C99 C11 変換対象列が16進形式であり、FLT_RADIXが2のべき乗である場合、変換の結果の値は、正しく丸められる。
"C"ロケール以外では、付加的に処理系定義の変換対象列の形式を受理しても構わない。
変換対象列が空であるかまたは認識可能な形式でないとき、変換は行わない。このとき、endptrが空ポインタでなければ、nptrの値をendptrが指すオブジェクトに格納する。
返却値 変換が可能であれば変換した値を返し、不可能であれば0を返す。正しい値が表現可能な値の範囲外であるとき、(返却値の符号にしたがって)正または負のHUGE_VALLを返し、errnoにはマクロERANGEの値を格納する。
変換結果がアンダフローを起こすときは、errnoにはマクロERANGEの値を格納して、以下の値を返す。
  • C89  0
  • C99 C11  long double型で最も小さな正規化された正の数以下の絶対値をもつ値
補 足 n文字列の意味は、処理系定義とする(処理系は、NaNの有効数字部の中に表現する付加情報を決定するためにn文字列を使用できる)。
変換対象列が負符号で始まるときに、負符号をもつ変換対象列を直接負数に変換するか、対応する符号無しの列から変換した結果を負数化することで変換するかは、未規定である。丸めが正の無限大方向や、負の無限大方向の場合二つの方法での結果は異なる。いずれの場合も、浮動小数点算術が符号付き0をサポートしている場合、関数は0の符号を正しく処理することができる。


BohYoh.comトップページへ