Addition of floating point, Why the First code work

207 views Asked by At

Why body of if() in 1st code Executes While the body of if() in 2nd code Doesn't Executes

Float are not precise

Working

double num1 = 0.2;
double num2 = 0.2;
double num3 = num1 + num2;
if (num3 == 0.4)
{
    MessageBox.Show("1st");
}

Not Working

double num1 = 0.1;
double num2 = 0.2;
double num3 = num1 + num2;
if (num3 == 0.3)
{
    MessageBox.Show("2nd");
}
1

There are 1 answers

6
Khurram Sharif On BEST ANSWER

Reason

Machine uses binary language When it convert number into binary , convert back into decimal The value get changed ,due to some number can't be converted Completely in binary

When you convert 0.1 into base 2 (binary) you get a repeating pattern after the decimal point,

Like 1/3 in base 10 ; 1/3=0.333333333333333333333333333333333.......... & never get Exact value

Therefor you can't Get every number's exact Value using normal floating point methods.

Example (Conversion Pattern)

0.1 Pattern In Binary...

Binary Pattern of 0.1

Source: Why 0.1 Does Not Exist In Floating-Point

0.1 Conversion 0.1 is one-tenth, or 1/10. To show it in binary You can See 100 is repeating after intervals As Giving output as 1001 as Shown In Diagram

Conversion Of 0.1 to binary

Source: Why 0.1 Does Not Exist In Floating-Point

Second Code Snippets {Answer of 0.1+0.2 Is not Same as actual value of 0.3}

--------------------------------------------------------------
Actual {Answer of 0.1+0.2 Is not Same as actual value of 0.3}
--------------------------------------------------------------
0.1=0.1000000000000000055511151231257827021181583404541015625
0.2=0.200000000000000011102230246251565404236316680908203125
0.3=0.299999999999999988897769753748434595763683319091796875

==============================================================
 Calculation 0.1 + 0.2
______________________________________________________________ 
 0.1=0.1000000000000000055511151231257827021181583404541015625
+0.2=0.200000000000000011102230246251565404236316680908203125
--------------------------------------------------------------
 0.3=0.3000000000000000444089209850062616169452667236328125

==============================================================
Answer
--------------------------------------------------------------
  0.3000000000000000444089209850062616169452667236328125
!=0.299999999999999988897769753748434595763683319091796875
---------------------------------------------------------------

First Code Snippets {Answer of 0.2+0.2 Is Same as actual value of 0.4}

---------------------------------------------------------------
Actual {Answer of 0.2+0.2 Is Same as actual value of 0.4}
---------------------------------------------------------------
 0.2=0.200000000000000011102230246251565404236316680908203125
 0.2=0.200000000000000011102230246251565404236316680908203125
 0.4=0.40000000000000002220446049250313080847263336181640625  
==============================================================
 Calculation 0.2 + 0.2
---------------------------------------------------------------
 0.2=0.200000000000000011102230246251565404236316680908203125
+0.2=0.200000000000000011102230246251565404236316680908203125
---------------------------------------------------------------
 0.4=0.40000000000000002220446049250313080847263336181640625

==============================================================
Answer
--------------------------------------------------------------
  0.4=0.40000000000000002220446049250313080847263336181640625
==0.4=0.40000000000000002220446049250313080847263336181640625
---------------------------------------------------------------
  1. Source:Is floating point math broken?

  2. Source:Why 0.1 Does Not Exist In Floating-Point

  3. Further Guide About Float Point

  4. Guide By Oricle

  5. Examine Number

  6. IEEE 754 double-precision binary floating-point format