为什么使用long声明和double声明得到的结果不一样呢?
为什么使用long声明和double声明得到的结果不一样呢?
程序如下:
1 public class P376{ 2 public static void main(String[] atgs){ 3 long sum1=0,n1=1; //此处采用long声明; 4 for (int i=1;i <=20;i++) { 5 n1*=i; 6 sum1+=n1; 7 } 8 System.out.println("1!+2!+3!+4!+5!....+20!="+sum1); 9 //------------------------------------------------------------- 10 double sum2=0,n2=1; //此处采用double声明; 11 for (int i=1;i <=20;i++) { 12 n2*=i; 13 sum2+=n2; 14 } 15 System.out.println("1!+2!+3!+4!+5!....+20!="+sum2); 16 } 17 }
结果为:
1!+2!+3!+4!+5!....+20!=2561327494111820313
1!+2!+3!+4!+5!....+20!=2.5613274941118203E18
本来double型比 long型的精度还要高,为什么double型最后两位“13”就没有了呢?
不是比long型的精度还要低了嘛?
请问是不是double使用科学计数法只精确到小数点后16位显示?实际上结果是没有误差的?
使用float只显示小数点后8位呢?