logo

C Float a Double

Plovák a dvojnásobek jsou dva primitivní datové typy v programování C, které se používají k ukládání desetinné hodnoty . Oba ukládají čísla s plovoucí desetinnou čárkou, ale liší se úrovní přesnosti, s jakou mohou hodnoty ukládat.

V tomto článku budeme podrobně studovat každou z nich, jejich paměťovou reprezentaci a rozdíl mezi nimi.



Plovák

Float se používá k ukládání čísel s plovoucí desetinnou čárkou s jednoduchou přesností. Může ukládat desetinné hodnoty s přesností až na 6-7 desetinných míst.

Syntax

 float var_name ;>
  • Velikost plováku je 4 byty.
  • Float může ukládat hodnoty různé od 3,4 x 10-38až 3,4 x 1038.
  • Může ukládat hodnoty až 7 desetinných míst bez ztráty přesnosti.
  • Specifikátor formátu pro float je %F.

Příklad

C




vyberte sql z více tabulek





// C Program to illustrate float> #include> > int> main()> {> >// Syntax of declaring and initializing> >// the float variable> >float> myVariable = 789.123456f;> > >// printing floating point number> >printf>(>'Float value is %f'>, myVariable);> >return> 0;> }>

může třída rozšířit více tříd
>

>

Výstup

Float value is 789.123474>

Jak můžete vidět na výše uvedeném výstupu, přesnost desetinných čísel se ztrácí po 7. číslici kvůli omezenému počtu bitů v float. V těchto případech se doporučuje dvojitý datový typ.

Poznámka: Všechny literály reálných čísel jsou ve výchozím nastavení dvojitého typu. Můžeme připojit an F na konci literálu jej definovat jako typ float.

výhody elektřiny

Dvojnásobek

Double se používá k uložení hodnot s plovoucí desetinnou čárkou s dvojnásobnou přesností. Je to větší verze float, která dokáže ukládat reálná čísla s přesností až na 15 desetinných míst.

  • Velikost dvojky je 8 bajtů.
  • Rozsah double je 1,7×10-308na 1,7×10+308.
  • Může ukládat hodnoty až 15 desetinných míst bez ztráty přesnosti.
  • Specifikátor formátu pro double je %lf

Příklad

C




#include> > int> main()> {> >// Syntax of declaring and initializing> >// the double variable> >double> myVariable = 789.123456;> >printf>(>'Double value is %lf'>, myVariable);> >//%lf or %f both can be used to> >// print Float values> >return> 0;> }>

>

>

jak najít blokovaná čísla na android
Výstup

Double value is 789.123456>

Jak se skladují float a double?

Jazyk C následuje standard IEEE 754 pro reprezentaci hodnot s pohyblivou řádovou čárkou v paměti. Na rozdíl od typu int, který je přímo uložen v paměti v binární podobě, jsou hodnoty float rozděleny na dvě části: exponent a mantisa a poté uloženy.

Podle IEEE 754 se hodnoty s pohyblivou řádovou čárkou skládají ze 3 složek:

java matematický pow
    Sign Bit: Představuje znaménko čísla. 0 představuje kladné, zatímco 1 představuje záporné. Zkreslený exponent: Exponent čísla nelze přímo uložit, protože může být záporný i kladný, takže používáme zkreslený exponent, kde k exponentu přidáme určité zkreslení. Normalizovaná mantisa: Matissa je číslo ve vědeckém zápisu, tj. přesné bity čísla.

C float Reprezentace paměti

Velikost floatu je 32 bitů, z toho:

    Nejvýznamnější bit (MSB) se používá k uložení podepsat čísla.
  • Další 8 bitů slouží k uložení exponent.
  • Zbývající 23 bitů slouží k uložení mantisa.
paměťová reprezentace plováku

Příklad

Vezměme 65,125 jako desetinné číslo, které chceme uložit do paměti.

Converting to Binary form, we get: 65 = 1000001 0.125 = 001 So, 65.125 = 1000001.001 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, we will get the baised exponent by adding the exponent to 127, = 127 + 6 = 133 Baised exponent = 10000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000101 00000100100000000000000>

C dvojitá reprezentace paměti

Velikost floatu je 32 bitů, z toho:

    Nejvýznamnější bit (MSB) se používá k uložení podepsat čísla.
  • Další 11 bitů slouží k uložení exponent.
  • Zbývající 52 bitů slouží k uložení mantisa.
paměťová reprezentace double

Příklad

Vezměme si příklad stejného čísla 65,125,

From above, 65.5 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, bais is 1023. So, = 1023 + 6 = 1029 Baised exponent = 10000000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000000101 0000010010000000000000000000000000000000000000000000>

Rozdíly mezi float a double

Body

Plovák

Dvojnásobek

Přesnost Float je s jednoduchou přesností IEEE 754 s plovoucí desetinnou čárkou, která poskytuje přesnost až na 7 desetinných míst. Double je dvojitá přesnost IEEE 754 s plovoucí desetinnou čárkou, která poskytuje přesnost až na 15 desetinných míst.
Využití paměti Float používá 32 bitů nebo 4 bajty paměti. Double používá 64 bitů nebo 8 bajtů paměti.
Rozsah Float může ukládat hodnoty od 3,4 x 10-38až 3,4 x 10+38. Rozsah double je 1,7×10-308na 1,7×10+308.
Specifikátor formátu %F je specifikátor formátu pro float. %lf je specifikátor formátu pro double.
Reprezentace paměti Znaménko = 1 bit
Exponent = 8 bitů
Mantisa = 23 bitů
Znaménko = 1 bit
Exponent = 11 bitů
Mantisa = 52 bitů

Závěr

Závěrem lze říci, že C používá pro desetinná čísla jak float, tak double, ale liší se z hlediska přesnosti, využití paměti, rozsahu a rychlosti. Když je prostor omezený a přesnost může být ohrožena, je lepší použít plovoucí tam, zatímco double se používá pro vysoce přesné aplikace, kde prostor není problém. Je nezbytné zvolit vhodný datový typ na základě požadavků aplikace.