Тип даних float - це 32-розрядний тип даних з плаваючою комою IEEE 754 одинарної точності, а тип даних double - це 64-розрядний тип даних з плаваючою комою IEEE 754 подвійної точності.
Що це означає? І коли потрібно використовувати float замість double або навпаки?
Хорошим місцем для початку є сторінка Вікіпедії, присвячена цьому питанню.
Підводячи підсумки:
float
представляється в 32 бітах, з яких 1 біт знаку, 8 біт експоненти і 23 біти знаменника (або що випливає з наукового запису числа: 2.33728*1012; 33728 - це знаменник).
"Подвійне" представлено в 64 бітах, з яких 1 біт знаку, 11 біт експоненти та 52 біти знаменника.
За замовчуванням Java використовує double
для представлення своїх чисел з плаваючою комою (тому літерал 3.14
набирається як double
). Це також тип даних, який дасть вам набагато більший діапазон чисел, тому я настійно рекомендую використовувати його замість float
.
Можуть існувати певні бібліотеки, які фактично змушують вас використовувати float
, але в цілому - якщо ви не можете гарантувати, що ваш результат буде досить малий, щоб поміститися в [заданий діапазон] float
(http://docs.oracle.com/javase/7/docs/api/java/lang/Float.html), то краще вибрати double
.
Якщо вам потрібна точність - наприклад, ви не можете мати десяткове значення, яке є неточним (наприклад, "1/10 + 2/10"), або ви робите "що завгодно" з валютою (наприклад, представляєте в системі $10,33), тоді використовуйте "Великий десятковий", який може підтримувати довільну точність і елегантно обробляти подібні ситуації.
Поплавковий дає точність приблизно 6-7 десяткових знаків, тоді як подвійний - приблизно 15-16. Крім того, діапазон чисел більший для подвійного числа.
Для подвійного числа потрібно 8 байт пам'яті, в той час як для числа з плаваючою комою потрібно лише 4 байти.
Числа з плаваючою комою, також відомі як дійсні числа, використовуються при обчисленні виразів, які вимагають дробової точності. Наприклад, обчислення, такі як квадратний корінь, або трансцендентні числа, такі як синус і косинус, призводять до значення, точність якого вимагає типу з плаваючою комою. Java реалізує стандартний (IEEE-754) набір типів і операторів з плаваючою комою. Існує два типи з плаваючою комою - float та double, які представляють числа одинарної та подвійної точності відповідно. Їх ширина та діапазони наведені тут:
Name Width in Bits Range
double 64 1 .7e–308 to 1.7e+308
float 32 3 .4e–038 to 3.4e+038
;
float
Тип float визначає значення одинарної точності, яке використовує 32 біти пам'яті. Одинарна точність працює швидше на деяких процесорах і займає вдвічі менше місця, ніж подвійна точність, але стає неточною, коли значення дуже великі або дуже малі. Змінні типу float корисні, коли вам потрібен дробовий компонент, але не вимагають великого ступеня точності.
Нижче наведено декілька прикладів оголошення змінних з плаваючою комою:
float hightemp, lowtemp;
<br/> double
Подвійна точність, що позначається ключовим словом double, використовує 64 біти для зберігання значення. Подвійна точність насправді швидша, ніж одинарна точність на деяких сучасних процесорах, які були оптимізовані для високошвидкісних математичних обчислень. Всі трансцендентні математичні функції, такі як sin( ), cos( ) і sqrt( ), повертають подвійні значення. Коли потрібно зберегти точність при багатьох ітеративних обчисленнях або маніпулюванні великими числами, double є найкращим вибором.