- 898 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:55:36 ]
- >>894
C言語で浮動小数点定数を float f1 = 3.14f; double f2 = 3.14; とすると,バイナリで見たときf1とf2には別のデータが入るよね? 人間は浮動小数点定数のバイナリ表現を書くのが面倒だから "3.14" 等とだけ書いてコンパイラに変換させているわけだが このときコンパイラに「IEEE single相当(仮数が23+1桁)の範囲で最良の3.14の近似を使ってくれ」 or 「IEEE double相当(仮数が52+1桁)の範囲で最良の3.14の近似を使ってくれ」と区別した指示を与えてることになる. この一般化で,"3.14 | 10" は「ここの定数には,仮数が10桁の範囲で最良の3.14の近似を使ってくれ」と要求していることになる. これは当然IEEE singleよりは桁が多いし,またIEEE doubleよりは桁が小さいので 普通に3.14と書いてデフォルトの52+1桁(以上)の数に変換させたときとは違う演算結果を得るだろうね. Mathematicaやbc(1)のように浮動小数点数データの内部に「有効桁」という属性が含まれるようになる,という意味ではないよ. ソースコード内の "3.14" などという文字列から処理系内部の数表現への,対応付けの厳密化だね. 指数表記にe, s, f, d, lの区別ができたり,ずいぶん細かくなったものだ. >>896 R5.97RS 4.2.8 Numbers
|

|