当我尝试将数字9223372036854775807与Math.pow(2,63)进行比较时,它给出了错误的答案。这是代码
long s = (long) (Math.pow(2, 63) - 1) ;
if ((s < Math.pow(2, 63)) && (s >= -Math.pow(2, 63)))
System.out.println("* long");
这不打印任何东西,而当我这样做时它确实
long s = (long) (Math.pow(2, 63) - 1) ;
if ((s <= Math.pow(2, 63)) && (s >= -Math.pow(2, 63)))
System.out.println("* long");
实际的节目就是这个......
package practice;
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Ques2ofHR_database {
public static void main(String[] args) {
int i;
Scanner in = new Scanner(System.in);
int n = in.nextInt();
for (i = 0; i < n; i++) {
long s =0;
try {
s = in.nextLong();
} catch (InputMismatchException e) {
System.out.println(in.next() + " can't be fitted anywhere.");
continue;
}
System.out.println(s + " can be fitted in:");
if ((s < Math.pow(2, 7)) && (s >= -Math.pow(2, 7)))
System.out.println("* byte");
if ((s < Math.pow(2, 15)) && (s >= -Math.pow(2, 15)))
System.out.println("* short");
if ((s < Math.pow(2, 31)) && (s >= -Math.pow(2, 31)))
System.out.println("* int");
if ((s <= Math.pow(2, 63)) && (s >= -Math.pow(2, 63)))
System.out.println("* long");
}
}
}
这个程序实际上找出了可以存储给定数字的所有数据类型(在byte,short,int和long之间)
和感谢提前......
答案 0 :(得分:1)
tsxs -o null-transform.so null-transform.cc
需要64位才能适合长变量。
Long.MAX_VALUE
返回一个双精度数。 double使用相同数量的位(64)来近似更大的浮点数(指数使用了一些位),因此Math.pow(2,63)
不能等于Math.pow(2,63)
,因为{ {1}}无法用双变量准确表示。
编辑:
实际上,Long.MAX_VALUE
可以在双变量中准确表示,因为它是2的幂,指数相对较小。但是,当您从中减去1时,会得到一个无法在双变量中准确表示的数字。