Why is only the last number wrong in the output this code:
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);
}
}
Output:
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
Mathematically they are equivalent, so what is going on?
Math.sqrt()
and Math.pow(,0.5)
is just as accurate.
You can't represent numbers with infinite precision in a finite computer, so you need to round. What you see is the effect of rounding. This is inherent to all uses of floating point numbers.
Mandatory link: What Every Computer Scientist Should Know About Floating-Point Arithmetic
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With