0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaで1e9のような書き方

Posted at

$10^9$のような整数の定数を書くとき、1000000000では0が何個あるかすぐに分からないです。
そこで、1000*1000*1000のように式を書けば、コンパイル時に計算結果の定数となります。

そんな時に

1e9という定数

とあるc++のソースで、int m=1e9;と書いてあり、指数表現の定数なのでしょうが、そういえばJavaでも書けたかなということで、久々に言語仕様を探してみた。

3.10.2 Floating-Point Literals

結論を言えば、1e9と書けますが、double型です。1e9dも同様です。1e9fはfloat型になります。
整数型は、10進数、8進数、16進数のパターンしかありません。

そこで、整数のdouble値をint型にダウンキャストすれば、$10^9$の定数に使えそうです。
さらに、long型も$10^{18}$で試してみる。

		{
			int v1 = (int)1e9;
			int v2 = (int)2e9;
			int v3 = Integer.MAX_VALUE;
			System.out.printf("%,d %,d %,d", v1, v2, v3);
			System.out.println();
		}
		{
			long v1 = (long)1e18;
			long v2 = (long)9e18;
			long v3 = Long.MAX_VALUE;
			System.out.printf("%,d %,d %,d", v1, v2, v3);
			System.out.println();
		}

実行結果
1,000,000,000 2,000,000,000 2,147,483,647
1,000,000,000,000,000,000 9,000,000,000,000,000,000 9,223,372,036,854,775,807

18個の0を数えるのは大変なので、カンマと付けましたが、意外と便利かもと思いました。
最小値の初期値としてよくMAX_VALUEを使いますが、計算の途中でオーバーフローする可能性1を気にする手間を考えると、$10^9$を2倍しても収まるのでちょうどよい感じの定数です。

BinaryExponentIndicator: one of p P

せっかくJava言語仕様を開いたので、浮動小数点の定数を見たのですが、最後に謎のpの文字。

標準ライブラリのDoubleクラスにありました。
仮数部と指数部なんて何十年前2に勉強したのでしょうか。

Double.java
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308
public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324

ということは、1は0x1p+0なのかな。

		{
			double v1 = 0x1p+0;
			double v2 = 0x1p+31;
			double v3 = 0x0.8p+0;
			double v4 = 0x0.1p+0;
			System.out.printf("%f %f %f %f", v1, v2, v3, v4);
			System.out.println();
		}

実行結果
1.000000 2147483648.000000 0.500000 0.062500

さすがdouble型です、仮数部が52ビットあるので、int型の範囲なら抜け落ちません。
最初に0x0.1p+0を指定して0.0625と出てきて、ああ、16進数の小数です。2進数で表現すると0.0001p+0みたいな感じ。
ちなみに、1p+0とは書けません。こちらは16進数オンリーです。

  1. そんなことはないだろうと思った人、二分探索でint mid=(left+right)/2でなく、int mid=left+(right-left)/2と書いてますかねぇ。

  2. 仮数部が何ビットか調べないとすぐに出てこないです。float(1+8+23ビット)、double(1+11+52ビット)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?