Win a copy of Rust Web Development this week in the Other Languages forum!
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Tim Cooke
• Campbell Ritchie
• Ron McLeod
• Liutauras Vilda
• Jeanne Boyarsky
Sheriffs:
• Junilu Lacar
• Rob Spoor
• Paul Clapham
Saloon Keepers:
• Tim Holloway
• Tim Moores
• Jesse Silverman
• Stephan van Hulst
• Carey Brown
Bartenders:
• Al Hobbs
• Piet Souris
• Frits Walraven

# Regarding Assignment

Greenhorn
Posts: 5
• Number of slices to send:
Optional 'thank-you' note:
The following code compiles and prints "true"
float f=Long.MAX_VALUE;
double d=Long.MAX_VALUE;
System.out.println(f==d);

But this code compiles and prints "false"
float f=Integer.MAX_VALUE;
double d=Integer.MAX_VALUE;
System.out.println(f==d);

Explain me the difference and why?

Ranch Hand
Posts: 580
• Number of slices to send:
Optional 'thank-you' note:
Hi boopathy

float f=Integer.MAX_VALUE;
double d=Integer.MAX_VALUE;
System.out.println(f==d);

This is true because float and double container can accomdate the max value of integer as it is.

But in this case

float f=Long.MAX_VALUE;
double d=Long.MAX_VALUE;
System.out.println(f==d);

since Double is big container than float,Float cannot stores as Double stores

This is way the float stores 2.14748365E9
This is way the long stores 2.147483647E9

SO IT IS FALSE

I hope now ur clear

Ranch Hand
Posts: 56
• Number of slices to send:
Optional 'thank-you' note:
Hi Sagar,

I think the explaination you have is viceversa. Please check. Correct me if I am wrong.

Mathangi.

vidya sagar
Ranch Hand
Posts: 580
• Number of slices to send:
Optional 'thank-you' note:
Hi mathangi

where i am wrong..........?i cannot anything wrong in my above statement...

Ranch Hand
Posts: 195
• Number of slices to send:
Optional 'thank-you' note:
vidya sagar, you are mistaken. Compile and run the code originally posted and you will see that boopathy Gopalsamy's claim is correct: the comparison involving Long.MAX_VALUE yields true, and the comparison involving Integer.MAX_VALUE yields false.

The reason one equality test returns true and the other returns false is that comparing floating-point numbers often has results that are difficult to predict. In this case, you're comparing a float and a double, so the compiler promotes the float to a double in order to do the comparison, because the compiler needs the two values to be the same type before comparing them. Here's a program that illustrates how this is happening:

The output is:

true
true
9.223372036854776E18
9.223372036854776E18
false
false
2.147483648E9
2.147483647E9

When f1 is cast to a double, it happens to have the same exact value as d1, so f1==d1 returns true. However, when f2 is cast to a double, it does not have exactly the same value as d2, so f2==d2 returns false. I don't think there is any way to predict the output without using a compiler, unless you happen to be an expert on floating-point bit patterns.

The moral: don't count on computer-based floating-point variables to be exactly equal to any values, even when pure mathematics suggests that they should be.

Ranch Hand
Posts: 817
• Number of slices to send:
Optional 'thank-you' note:
Joe Sanowitz
pls tell the reason why floating value is chaning on casting to double even when it can hold the interger.max value... ?
and why its not changing in double max value ?

ok ...i have one more question above all ...that generally
as both float and integer are 32 bits then how integer can be implicitly be casted to floating point ..if all 32 bits are utilized and in that case where the value after decimal will be stored ?
i think interger don't have decimal value so float will always have .00 ( i.e zero values after decimal after decimal ?

is i m rt ?

Greenhorn
Posts: 13
• Number of slices to send:
Optional 'thank-you' note:

Joe Sanowitz
pls tell the reason why floating value is chaning on casting to double even when it can hold the interger.max value... ?

Yes, float value can "hold" the integer.max value. Which only means the integer.max value fall into the "range" of the number a float can represents. BUT: It is impossible for float to PRECISELY represents all the numbers fall within its range. That is simply because there is infinite float numbers fall within a un-empty range and the bit-depth of float is limited.

 Consider Paul's rocket mass heater.