Saturday, 31 May 2025

đŸŸĸFloat vs Double in Java part 1đŸŸĸ

 

🔰 āļ¸ේ article āļ‘āļšෙāļą් āļšāļ­ා āļšāļģāļą්āļąෙ  float datatype āļ‘āļšෙāļą් āļŊිāļēāļą āļ…āļœāļēāļš් RAM āļ‘āļšේ store ⎀ෙāļŊා āļ­ිāļēෙāļą්āļąෙ āļšො⎄ොāļ¸āļ¯ āļšිāļēāļŊ āļ‘⎄ෙāļ¸ āļąැāļ­්āļąāļ¸් float value āļ‘āļšāļš binary representation āļ‘āļš āļšො⎄ොāļ¸āļ¯ āļ­ිāļēෙāļą්āļąෙ āļšිāļēāļŊා


---‐-----------------------------


⎄āļģි, Java ⎀āļŊ whole numbers āļ‘⎄ෙāļ¸ āļąැāļ­්āļ­āļ¸් āļ´ූāļģ්āļĢ āˇƒංāļ›්‍āļēා āļąිāļģූāļ´āļĢāļē āļšāļģāļą්āļą data types 4 āļš් āļ­ිāļēෙāļąāˇ€ා 


        1. Byte (8bits)

        2. Short (16bits)

        3. Int (32bits)

        4. Long (64bits)


☆ āļ¸ේ datatypes ⎀āļŊ positive ⎄ා negative numbers āļąිāļģූāļ´āļĢāļē āļšāļģāļą්āļą āļ­ිāļēෙāļą technique āļ‘āļš āļ­āļ¸ා 2's complement āļšිāļēāļą්āļąෙ ⎄ැāļļැāļēි āļ…āļ´ි āļ¸ේ āļšāļ­ා āļšāļģāļą්āļą āļēāļą float ⎄ා double datatypes ⎀āļŊ RAM representation āļ‘āļš āļ’ āļšිāļēāļą්āļąෙ float ⎄āļģි double ⎄āļģි variable āļ‘āļšāļšāļ§ assign āļšāļģāļą value āļ‘āļšāļš් RAM āļ‘āļšෙ store ⎀ෙāļŊා āļ­ිāļēෙāļą āˇ€ිāļ¯ිāļē āļšāļŊිāļą් āļ…āļ´ි āļšāļ­ා āļšāļģāļ´ු int,short,long,byte ⎀āļœේ datatype ⎀āļŊ variable āļ‘āļšāļš store ⎀ෙāļŊා āļ­ිāļēෙāļą value āļ‘āļšāļ§ āˇ€āļŠා āļ­āļģāļ¸āļš් ⎀ෙāļąāˇƒ්


🔰 float āļ‘āļšāļš āˇ„āļģි double āļ‘āļšāļšිāļą්  ⎄āļģි ⎃ංāļ›්‍āļēා⎀āļš් āļŊි⎀ු⎀āļ¸ apparently, āļ…āļ´ිāļ§ āļ¯āļšිāļą්āļą āļ­ිāļēෙāļą āˇ€ෙāļąāˇƒ āļ­āļ¸ා float value āļ‘āļšāļš් 'f' āļ‘āļšāļšිāļą් āļ…āˇ€āˇƒāļą් ⎀ෙāļąāˇ€ා ⎄ැāļļැāļēි double value āļ‘āļšāļš් normally āļ…āļ´ි āļŊිāļēāļą āļ¯āˇāļ¸ āˇƒංāļ›්‍āļēා⎀āļš් ⎀ිāļ¯ිāļēāļ§ āļ…āˇ€āˇƒāļą් ⎀ීāļ¸


float number1 = 35.35f; //float

double number2 = 35.35; //double


āļ”āļē ⎀ිāļ¯ිāļēāļ§ āļ­āļ¸ා Java ⎀āļŊ float ⎄ා double values āļąිāļģූāļ´āļĢāļē āļšāļģāļą්āļąෙ


🔰āļ…āļąිāļ­් āļ‘āļš āļ­āļ¸ා bit allocation āļ‘āļš. Float ⎀āļŊ āļ…āļœāļēāļš් āļąිāļģූāļ´āļĢāļē āļšāļģāļą්āļą RAM āļ‘āļšෙ bit 32(4 bytes) āļ•āļą āˇ€ෙāļąāˇ€ා āļ‘āļ­āļšොāļ§ double value āļ‘āļšāļš් āļąිāļģූāļ´āļĢāļē āļšāļģāļą්āļą bit 64(8bytes) āļ•āļą āˇ€ෙāļąāˇ€ා 


🔰āļ‘āļ­āļšොāļ§ āļšෙāļąෙāļš්āļ§ āˇ„ිāļ­ෙāļą්āļą āļ´ුāļŊු⎀āļą් int datatype āļ’āļšෙ bit 32 long datatype āļ‘āļšේ bit 64 āļēිāļąෙ āļ’ āˇ„ිāļą්āļ¯ āļ¸ේ datatypes ⎀āļŊ RAM representation āļ‘āļš āļ´ිāļŊි⎀ෙāļŊිāļą් float ⎄ා double ⎀āļŊ representation āļ‘āļšāļ§ āˇƒāļ¸ාāļą āˇ€ෙāļą්āļąෙ āļąැāļ¯්āļ¯ āļšිāļēāļŊ (eventhough they have floating point values).


⎄ැāļļැāļēි āļ‘⎄ෙāļ¸ āˇ€ෙāļą්āļąෙ āļąෑ


📌int value āļ‘āļšāļš binary representation āļ‘āļš āļ´ොāļŠ්āļŠāļš් āļļāļŊāļ¸ු 


Eg:- 


đŸŸĸ+10 


0   0000000000000000000000000001010

|

|-》sign bit


đŸŸĸ -10 


1   1111111111111111111111111110101

|

|-》sign bit


📌Long ⎀āļŊāļ­් āļ”āļē ⎀ිāļ¯ිāļēāļ§ āļ­āļ¸ා 2's complement ⎀āļŊāļ§ āļēāļą්āļąෙ ⎄ැāļļැāļēි bit allocation āļ‘āļš āˇ€ිāļ­āļģāļš් ⎀ෙāļąāˇƒ් ⎀ෙāļąāˇ€ා


đŸ”°āˇ„āļģි āļ¯ැāļą් āļ…āļ´ිāļ§ āļ…⎀āļļෝāļ°āļēāļš් āļ­ිāļēෙāļąāˇ€ා āļšො⎄ොāļ¸āļ¯ int,long ⎀āļŊිāļą් positive ⎄ා negative numbers binary represent āļšāļģāļą්āļąෙ āļšිāļēāļŊා


āļ¯ැāļą් āļ…āļ´ි āļ¸ාāļ­ෘāļšා⎀āļ§ āļ‘āļ¸ු.


-------‐-------------------------

⚙️ āļ¸ුāļŊිāļą්āļ¸ āļ…āļ´ි āļšāļ­ා āļšāļģāļ¸ු float datatype āļ‘āļšāļšිāļą් āļŊිāļēāļ´ු value āļ‘āļšāļš binary āļąිāļģූāļ´āļĢāļē āļšො⎄ොāļ¸āļ¯ āļšිāļēāļŊ 

(See image 2)








⎄āļģි āļ‘āļ­āļšොāļ§ float āļ‘āļšāļšිāļą් number āļ‘āļšāļš් āļŊි⎀ු⎀⎄āļ¸ create ⎀ෙāļą binary number āļ‘āļšෙ structure āļ‘āļš āļ­āļ¸ා āļ”āļē āļ­ිāļēෙāļą්āļąෙ (āļ´ේāļąāˇ€āļąෙ āļšāļŊිāļą් āļšāļ­ා āļšāļģāļ´ු datatypes 4 ⎀āļŠා structure āļ‘āļš āļ´ොāļŠ්āļŠāļš් ⎀ෙāļąāˇƒ් āļšිāļēāļŊා ) āļ¸ේ āļ§ිāļš āļ…āļ´ි āļ‘āļšිāļą් āļ‘āļš breakdown āļšāļģāļœāļ¸ු.


📌 Eg:- 4.15f 


āļ‹āļŠ āļ­ිāļēෙāļą float number āļ‘āļš āļ­āļ¸ා āļ…āļ´ි ⎀ැāļŠේāļ§ āļœāļą්āļąෙ


🔰 1st Step:- 


Convert the decimal number in to its binary number 


āļ’ āļšිāļēāļą්āļąෙ 10 āļ´ාāļ¯āļēෙāļą් āļ…āļ´ි āļŊāļœ āļ­ිāļēෙāļą āˇƒංāļ›්‍āļēා⎀ 2 āļ´ාāļ¯āļēāļ§ āļ´āļģි⎀āļģ්āļ­āļąāļē āļšāļģāļœāļą්āļą āļ•āļą āļ‘āļ­āļšොāļ§ āļ‘āļą āļ…āļœāļē 

     

      100.0010011


🔰2nd step:-


Normalize the binary number 


āļ’ āļšිāļēāļą්āļąෙ āļ…āļ´ි āļ…āļ¯ාāļŊ āļ¯්⎀ිāļ¸āļē ⎃ංāļ›්‍āļēා⎀ scientific notation āļ‘āļšāļ§ āļŊිāļēාāļœāļą්āļą āļ•āļą. Scientific notation āļšිāļēāļą්āļąෙ āļ‰āļ­ා ⎀ි⎁ාāļŊ ⎃ංāļ›්‍āļēා⎀āļš් āļąැāļ­්āļ­āļ¸් āļ‰āļ­ා āļšුāļŠා ⎃ංāļ›්‍āļēා⎀āļš් āļ…āļ´ිāļ§ manage āļšāļģāļœāļą්āļą āļ´ුāļŊු⎀āļą් ⎀ිāļ¯ිāļēāļ§ āļ’ āļšිāļēāļą්āļąේ

Calculations āļšāļģāļą්āļą, āļ…āļąිāļ­් ⎀ි⎁ාāļŊ ⎄ෝ āļšුāļŠා ⎃ංāļ›්‍āļēා⎀āļą් āļ‘āļš්āļš āˇƒං⎃āļą්āļ¯āļąāļē āļšāļģāļą්āļą āļ´ුāļŊු⎀āļą් ⎀ිāļ¯ිāļēāļ§ āˇ„āļ¯ාāļœāļą්āļą āļ‘āļš. āļ‰āļ­ිāļą් Scientific notation āļ‘āļšāļ§ āļ•āļąāļ¸ āļ´ාāļ¯āļēāļš්(base) āļ‘āļš්ā ⎀ැāļŠ āļšāļģāļą්āļą āļ´ු⎅ු⎀āļą්.


   100.0010011 --> 1.000010011 × 2²


āļ”āļē āļ­ිāļēෙāļą්āļąෙ āļ…āļ´ි ⎄āļ¯ාāļœāļ­්āļ­ binary number āļ‘āļšේ scientific notation āļ‘āļš. āļ•āļšෙ āļ…āļ´ි 2 āļļāļŊāļē 2 ⎀ිāļ¯ිāļēāļ§ āļ…āļ´ි āļŊිāļēāļŊ āļ­ිāļēෙāļąāˇ€āļąෙ āļ…āļ¯ාāļŊ ⎃ංāļ›්‍āļēා⎀, āļ’āļšෙ power āļ‘āļšāļ§ āļąැāļ­්āļ­āļ¸් āļļāļŊāļēāļ§ āļ­āļ¸ා exponent āļšිāļēāļŊ āļšිāļēāļą්āļąෙ(āļ¸āļą් ⎄ිāļ­āļąāˇ€ා image 2 āļ‘āļšේ exponent āļšිāļēāļą āļšොāļ§āˇƒ āļœැāļą āļ´ොāļŠි idea āļ‘āļšāļš් āļ‘āļą්āļą āļ‡āļ­ි āļšිāļēāļŊා. Float āļ‘āļšāļš exponent āļ‘āļšāļ§ āļ…āļ´ි bit 8āļš් ⎀ෙāļą් āļšāļģāļąāˇ€ා )


🔰āļ‘āļ­āļšොāļ§ āļ‡āļēි āļ…āļ´ි power āļ‘āļšāļ§ āˇ€ිāļ¯ිāļēāļ§ 2 āļ¯ැāļ¸්āļ¸ෙ . āļ’āļšāļ§ āˇ„ේāļ­ු⎀ āļ­āļ¸ා 100.0010011 value āļ‘āļšේ bits āļ¯ෙāļšāļš් left side āļ‘āļšāļ§ shift āļšāļģāļ´ු āļ‘āļš.


āļ¸ේ scientific notation āļ‘āļš āļ­ේāļģුāļ¸් āļœāļą්āļą āļ´ොāļŠි example āļ‘āļšāļš් āļļāļŊāļ¸ු. 


Eg:- 10.75 base 10


āļ¸ේāļš 10 āļ´ාāļ¯āļēේ ⎃ංāļ›්‍āļēා⎀āļš් . āļ¸ේ ⎃ංāļ›්‍āļēා⎀ āļ…āļ´ි scientific notation āļ‘āļšෙāļą් āļŊි⎀්⎀ොāļ­් āļ‘āļą්āļąෙ


    1.075 × 10¹


🔰10¹ āļšිāļēāļą්āļąෙ 10 āļąෙ āļšො⎄ොāļ¸āļ­්. āļ‘āļ­āļšොāļ§ 10 × 1.075 āļ‹āļ­්āļ­āļģේ āļ‘āļą්āļąෙ 10.75. āļ¸ේ ⎀ිāļ¯ිāļēāļ§āļ¸ āļ­āļ¸ා āļ…āļ´ි āļšāļŊිāļą් binary number āļ‘āļš scientific notation āļ‘āļšāļ§ āˇ„āļģ⎀āļœāļ­්āļ­ෙ (but in base 2)


🔰likewise computer āļ‘āļš āˇ€ැāļŠ āļšāļģāļą්āļąෙ machine language (0,1) āļ‘āļš්āļš āˇ„ිāļą්āļ¯ා āļ…āļ´ි binary scientific notation āļ‘āļš use āļšāļģා.


⎄āļģි āļ¯ැāļą් āļ…āļ´ි 3rd step āļ‘āļšāļ§ āļēāļ¸ු.


🔰3rd step :-


Add a bais value to exponent

āļ…āļ´ිāļ§ float,double ⎀āļŊ negative numbers represent āļšāļģāļą්āļą 2's complement āļˇා⎀ිāļ­ා āļšāļģāļą්āļąෙ āļąෑ āļ’ āˇ€ෙāļąු⎀āļ§ IEE 754 format āļ¸āļ­ āļ´āļ¯āļąāļ¸් ⎀ෙāļ ්āļ  sign- magnitude system āļ‘āļšāļš් āļ­āļ¸ා use āļšāļģāļą්āļąෙ. Bais āļšිāļēāļŊ  āļšිāļēāļą්āļąෙ negative ⎄ා positive exponent āļąිāļģූāļ´āļĢāļē āļšāļģāļą්āļą use āļšāļģāļą concept āļ‘āļšāļš්

(āļšො⎄ොāļ¸āˇ„āļģි bais āļšිāļēāļŊා ⎃ංāļšāļŊ්āļ´āļēāļš් āļ­ිāļēෙāļąāˇ€ා āļšිāļēāļŊා idea āļ‘āļšāļš් āļ­ිāļēෙāļą්āļą āļ•āļą)


āļ¸ේ bais āļšිāļēāļą value āļ‘āļš āļąිāļšāļ¸් constant āļ‘āļšāļš්(āļąිāļēāļ­āļēāļš්) ⎀āļœේ ⎄ැāļ¸ float value āļ‘āļšāļšāļ¸ bais values āļ‘āļš constant  āļ…āļœāļēāļš් . Bais āļ‘āļš āˇ„ොāļēāļą්āļą āļ´ොāļŠි formula āļ‘āļšāļš් āļ­ිāļēෙāļąāˇ€ා.


📌Bais value = 2(n-1) -1


⭕️Note : (n-1) āļšිāļēāļą්āļąෙ 2 power āļ‘ā


🔰āļ‘āļ­āļšොāļ§ n āļšිāļēāļą්āļąෙ exponent āļ‘āļšෙ bit āļœāļĢāļą. float  ⎀āļŊ exponent āļ‘āļšේ bit 8 ⎄ිāļą්āļ¯ n ⎀āļŊ āļ…āļœāļē 8. āļ‘āļ­āļšොāļ§ āļ…āļ´ේ bais value āļ‘āļš


=  2(n-1) -1

=  2(8-1) -1

=  2 ⁷ -1

=  128 -1

=  127


🔰 4th step :- 


Final step āļ‘āļš āļ­āļ¸ා exponent āļ‘āļš noramlize āļšිāļģීāļ¸. āļ’ āļšිāļēāļą්āļąෙ āļ…āļ´ි āļœා⎀ āļ­ිāļēෙāļą exponent value āļ‘āļš(2) āļ…āļ´ි ⎄āļ¯ාāļœāļ­්āļ­ bais value āļ‘āļšāļ§(127) āļ‘āļšāļ­ු āļšāļģāļą්āļą āļ•āļą 


📌Normalized =  Actual exponent + bais 

     Exponent 


                         = 2  + 127

                         = 129


🔰Exponent āļ‘āļš noramlize āļšāļģāļą්āļąෙ positive ⎄ා negative exponent use āļšāļģāļą්āļą āļ´ුāļŊු⎀āļą් ⎀ෙāļą්āļą

----------------------------------


🔰āļ¯ැāļą් āļ…āļ´ි āļœා⎀ āļ•āļą āļšāļģāļą items āļ”āļš්āļšොāļ¸ āˇ€āļœේ āļ­ිāļēෙāļąāˇ€ා


1) sign bit āļ‘āļš 0(since 4.15  '+' number)

2) Exponent value āļ‘āļš(10000001)


āļ’āļ­් āļ‘āļš්āļšāļ¸ āļ…āļ´ි image 2 āļ‘āļšේ āļšāļ­ා āļšāļģāļ´ු Mantissa āļ‘⎄ෙāļ¸ āļąැāļ­්āļ­āļ¸් significand part āļ‘āļšāļ­් āļ­ිāļēෙāļąāˇ€ා 


1.000010011 × 2² value āļ‘āļšෙ .000010011 āļ­āļ¸ා Mantissa āļšිāļēāļą්āļąෙ.


🔰āļ¸ෙāļ­āļąāļ¯ි āļ…āļ´ි dot(.) āļ‘āļšāļ§ āļšāļŊිāļą් āļ­ිāļēෙāļą 1 āļąො⎃āļŊāļšා ⎄āļģිāļąāˇ€ා āļ¸ොāļšāļ¯ āļ…āļ´ි binary value āļ‘āļšāļš් noramlize āļšāļģāļ¯්āļ¯ි 

'1' āļ­āļ¸ා āļ¸ුāļŊāļ§ āļ‘āļą්āļąෙ 


đŸ”°āˇ„ැāļļැāļēි Mantissa āļ‘āļšෙ bit 23 āļ­ිāļēෙāļąāˇ€āļąෙ Float āļ‘āļšāļ§ āļ…āļ¯ාāļŊ⎀ āļ’ āˇ„ිāļą්āļ¯ා āļ…āļ´ි āļšāļŊිāļą් Mantissa eket assign āļšāļģāļ´ු 000010011 set āļ‘āļšේ āļ‰āļ­ුāļģු bit āļ§ිāļšāļ§ '0' assign āļšāļģāļąāˇ€ා


🔰So finally. Binary representation of 4.15f will be 


0  10000001 00001001100000000000000


-----------------------------------------------------------------------------------------------------------------------------


āļ‰āļ­ිāļą්  āļ”⎄ොāļ¸ āļ­āļ¸ා āļ…āļ´ි java ⎀āļŊ float value āļ‘āļšāļš් RAM āļ‘āļšේ store āļšāļģāļŊා āļ­ිāļēෙāļą āˇ€ිāļ¯ිāļē. 

So that's it 💚. Negative exponent ⎀ැāļŠ āļšāļģāļą්āļąෙ āļšො⎄ොāļ¸āļ¯, Double āļ‘āļšේ binary representation āļšො⎄ොāļ¸āļ¯ āļšිāļēāļŊ āļŠāļŊāļœāļ§ āļšāļ­ා āļšāļģāļ¸ු.

Image credits and references:

https://javarevisited.blogspot.com/2016/05/difference-between-float-and-double-in-java.html?m=1

https://www.log2base2.com/storage/how-float-values-are-stored-in-memory.html









No comments:

Post a Comment

đŸŸĸFloat vs Double in Java part 1đŸŸĸ

  🔰 āļ¸ේ article āļ‘āļšෙāļą් āļšāļ­ා āļšāļģāļą්āļąෙ  float datatype āļ‘āļšෙāļą් āļŊිāļēāļą āļ…āļœāļēāļš් RAM āļ‘āļšේ store ⎀ෙāļŊා āļ­ිāļēෙāļą්āļąෙ āļšො⎄ොāļ¸āļ¯ āļšිāļēāļŊ āļ‘⎄ෙāļ¸ āļąැāļ­්āļąāļ¸් float value āļ‘āļšāļš binar...