Naa*_*aaN 9 java floating-point double
我在提到这个 Oracle文档.在尝试执行以下操作时
public static void main(String args[]){
float f = 1.1f;
double df = 1.1f;
System.out.println("f=" + f);
System.out.println("df=" + df);
f = 1.5f;
df = 1.5f;
System.out.println("f=" + f);
System.out.println("df=" + df);
}
Run Code Online (Sandbox Code Playgroud)
输出是
f = 1.1
df = 1.100000023841858
f = 1.5
df = 1.5
Run Code Online (Sandbox Code Playgroud)
为什么第二行输出显示近似值.但不是第四线.如何计算价值?
不同之处1.5
在于 double 可以精确表示 - 而1.1
不能精确表示。
这是因为周期性数字,任何(不可约)分数,其中分母具有不在基数中出现的质因数,都需要在某个点之后周期性重复的无限多个数字。例如,在十进制中和1/4
是有限的,因为和是 的素因数。但不是有限的,也不是或或,因为和不是 的因子。分母中素因数为 的分数在底数上可以是有限的,但在底数上却不是有限的——这是大多数浮点数新手用户困惑的最大根源。3/5
8/20
2
5
10
1/3
2/3
1/7
5/6
3
7
10
5
10
2
将无限多个实数压缩为有限数量的位数需要近似表示。虽然整数有无限多个,但在大多数程序中,整数计算的结果可以存储在 32 位中。相反,给定任何固定的位数,大多数实数计算将产生无法使用这么多位数精确表示的数量。因此,浮点计算的结果通常必须进行舍入,以适应其有限表示。这种舍入误差是浮点计算的特征。
检查这里了解更多详情
归档时间: |
|
查看次数: |
529 次 |
最近记录: |