logo

C Float і Double

Поплавок і подвійний це два примітивні типи даних у програмуванні на C, які використовуються для зберігання десяткові значення . Вони обидва зберігають числа з плаваючою комою, але відрізняються рівнем точності, з яким вони можуть зберігати значення.

У цій статті ми детально вивчимо кожен із них, їх представлення в пам’яті та різницю між ними.



Поплавок

Float використовується для зберігання чисел з плаваючою комою одинарної точності. Він може зберігати десяткові значення з точністю до 6-7 знаків після коми.

Синтаксис

 float var_name ;>
  • Розмір поплавця становить 4 байти.
  • Float може зберігати значення, що відрізняються від 3,4 х 10-38до 3,4 х 1038.
  • Він може зберігати значення до 7 знаків після коми без втрати точності.
  • Специфікатор формату для float є %f.

приклад

C




модем проти маршрутизатора





// 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;> }>

>

списки в java

>

Вихід

Float value is 789.123474>

Як ви бачите у наведеному вище виводі, точність десяткових чисел втрачається після 7-го розряду через обмежені біти в float. У цих випадках рекомендується подвійний тип даних.

Примітка: Усі літерали дійсних чисел типово мають тип double. Ми можемо додати f у кінці літералу, щоб визначити його як тип float.

Двомісний

Double використовується для зберігання значень з плаваючою комою подвійної точності. Це розширена версія float, яка може зберігати дійсні числа з точністю до 15 знаків після коми.

перевести рядок до int
  • Розмір подвійний становить 8 байт.
  • Діапазон подвійний є 1,7×10-308до 1,7×10+308.
  • Він може зберігати значення до 15 знаків після коми без втрати точності.
  • Специфікатор формату для double є %lf

приклад

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;> }>

>

>

Вихід

едіт мак гірш
Double value is 789.123456>

Як зберігаються float і double?

Мова C слідує за Стандарт IEEE 754 для представлення значень з плаваючою комою в пам'яті. На відміну від типу int, який безпосередньо зберігається в пам’яті у двійковій формі, значення з плаваючою точкою діляться на дві частини: експоненту та мантису, а потім зберігаються.

Відповідно до IEEE 754 значення з плаваючою комою складаються з 3 компонентів:

    Знаковий біт: це знак числа. 0 означає позитивне значення, а 1 – негативне. Зміщена експонента: експоненту числа неможливо зберегти безпосередньо, оскільки вона може бути як від’ємною, так і додатною, тому ми використовуємо зміщену експоненту, де додаємо до експоненти деяке зміщення. Нормалізована мантиса: Матіса — це число в науковому записі, тобто точні біти числа.

C float Представлення пам'яті

Розмір float становить 32 біти, з яких:

    Старший біт (MSB) використовується для зберігання знак числа.
  • Наступний 8 біт використовуються для зберігання експонента.
  • Нагадування 23 біти використовуються для зберігання мантиса.
представлення пам'яті float

приклад

Давайте візьмемо 65,125 як десяткове число, яке ми хочемо зберегти в пам’яті.

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 подвійне представлення пам'яті

Розмір float становить 32 біти, з яких:

    Старший біт (MSB) використовується для зберігання знак числа.
  • Наступний 11 біт використовуються для зберігання експонента.
  • Нагадування 52 біти використовуються для зберігання мантиса.
представлення пам'яті подвійного

приклад

перетворення рядка java в int

Візьмемо для прикладу те саме число 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>

Відмінності між float і double

Очки

Поплавок

Двомісний

Точність Float — це число з плаваючою комою одинарної точності IEEE 754, яке забезпечує точність до 7 ком. Double — це число з плаваючою комою IEEE 754 подвійної точності, яке забезпечує точність до 15 десяткових знаків.
Використання пам'яті Float використовує 32 біти або 4 байти пам'яті. Double використовує 64 біти або 8 байт пам'яті.
Діапазон Float може зберігати значення від 3,4 x 10-38до 3,4 х 10+38. Діапазон подвійних 1,7×10-308до 1,7×10+308.
Специфікатор формату %f є специфікатором формату для float. %lf є специфікатором формату для double.
Репрезентація пам'яті Знак = 1 біт
Експонента = 8 біт
Мантиса = 23 біти
Знак = 1 біт
Експонента = 11 біт
Мантиса = 52 біти

Висновок

Підсумовуючи, C використовує як float, так і double для десяткових чисел, але вони відрізняються з точки зору точності, використання пам’яті, діапазону та швидкості. Коли простір обмежений і точність може бути порушена, краще використовувати там float, тоді як double використовується для високоточних програм, де простір не є проблемою. Важливо вибрати відповідний тип даних відповідно до вимог програми.