为什么输出最后一个数字错误代码:
public class Test { public static void main(String[] args) { System.out.println("Hello world"); System.out.println("I wounder is the sqaure root of (2*3) the same as the sqaure root of 2 and 3 multiplied."); double squareroot0 = Math.pow(3*2,0.5); double squarroot1 = (Math.pow(3,0.5) * Math.pow(2,0.5)); System.out.println("So is it the same?"); System.out.println("is " + squareroot0 + " the equvielant of " + squarroot1 + "?"); if(squareroot0 == squarroot1) { System.out.println("Yes number one and number two are the same,Congrats!"); }else { System.out.println("No they are not! "); } System.out.println(squareroot0); System.out.println(squarroot1); } }
输出:
Hello world I wonder is the sqaure root of (2*3) the same as the sqaure root of 2 and 3 multiplied. So is it the same? is 2.449489742783178 the equvielant of 2.4494897427831783? No they are not! 2.449489742783178 2.4494897427831783
在数学上他们是等同的,那怎么回事?
Math.sqrt()和Math.pow(,0.5)也是一样准确.
解决方法
在有限的计算机中,您无法用无限精度代表数字,所以你需要轮回.你看到的是舍入的效果.这是浮点数的所有使用所固有的.
强制性链接:What Every Computer Scientist Should Know About Floating-Point Arithmetic