Поплавок і подвійний це два примітивні типи даних у програмуванні на 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 біти використовуються для зберігання мантиса.
приклад
Давайте візьмемо 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 використовується для високоточних програм, де простір не є проблемою. Важливо вибрати відповідний тип даних відповідно до вимог програми.