ダブル型のインクリメント

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ダブル型のインクリメント

Re: ダブル型のインクリメント

#3

by かずま » 2年前

int でも、double でも正しくインクリメントできない場合があります。

コード:

#include <stdio.h>

int main()
{
	int i = 2147483644;
	double d = 9007199254740989.0;
	for (int k = 0; k < 5; k++) {
		printf("%12d  %.1f\n", ++i, ++d);
	}
	return 0;
}
実行結果

コード:

  2147483645  9007199254740990.0
  2147483646  9007199254740991.0
  2147483647  9007199254740992.0
 -2147483648  9007199254740992.0
 -2147483647  9007199254740992.0
浮動小数点数の計算で最も広く採用されている標準規格は、IEEE 754 です。
符号 1ビット、指数 11ビット、仮数 52ビットですが、正規化した時の
最上位ビットの 1を省略しているので、精度は 2進 53ビットです。
10進では約16桁。なぜ約かというと、53ビットでは、2の 53乗で
9007199254740992通りの値を正確に表せます。整数で言えば、
0~9007199254740991 です。
0~9999999999999999 なら本当に 10進16桁の精度と言えますが、
ちょっと足りないですね。

54ビットの 9007199254740992 は偶数で、最下位ビットが 0 ですから、
上位 53ビットだけを記憶できればよく、これも OK です。

しかし、9007199254740993 は奇数で、最下位ビットが 1 ですから、
54ビットを必要とし、IEEE 754 では表現できません。

Re: ダブル型のインクリメント

#2

by purin52002 » 2年前

http://dixq.net/forum/viewtopic.php?f=3&t=9447
検索かけたら出てきました^p^

ダブル型のインクリメント

#1

by ジョー » 2年前

ダブル型の変数に対してインクリメント演算子を作用させたいのですがやり方を教えてください。

ページトップ