3.2: числа з плаваючою комою
- Page ID
- 67147
Багато полів у наукових обчислень покладаються на використання десяткових знаків, і стандартний спосіб зберігання їх у комп'ютері - з числами з плаваючою комою. Детальна інформація про числа з плаваючою комою наведена в Додатку XXXX. Джулія має 16-,32- та 64-розрядні числа з плаваючою комою під назвою Float16
, Float32
та Float64
, і за замовчуванням у більшості систем є Float64
.
Існує два обмеження для будь-якого числа з плаваючою комою. По-перше, кількість цифр, що зберігаються в числі, а по-друге, максимальне і мінімальне значення. Кожен вбудований тип розділяє кількість бітів на зберігання обох, і між ними існує баланс. Емпіричне правило полягає в тому, що
• Float16
зберігає 4 десяткові цифри, а максимум становить близько 32 000.
• Float32
зберігає 8 десяткових знаків, а макс становить близько\(10^{38}\).
• Float64
зберігає 16 десяткових цифр, а макс становить близько\(10^{307}\)
Ми можемо використовувати функцію bitstring
в julia, щоб знайти двійкове подання. Зауважте, що
Знову ж таки, деталі знаходяться в Додатку XXXXX, але, коротше кажучи, число з плаваючою комою зберігається в науковому позначенні з абсцисою, показником та знаком, об'єднаним разом.
На відміну від цілих чисел, більшість чисел не можна зберігати точно з числом з плаваючою комою. Наприклад, 1/3 ділить 1 на 3 і призводить до числа з плаваючою комою, близьким до дробу\(\frac{1}{3}\). У юлії це 0.33333333333333333333 а також зауважте, що
Зверніть увагу, що є ненульові біти по всьому числу в цьому випадку, що не відбулося з 8.625. Це пояснюється тим, що як дріб 8.625 має знаменник 8, який є степеню 2. Якщо дріб може бути записаний з таким знаменником, число у двійковому рядку має 0, що накладає правий кінець числа.
Що це має значення? Розглянемо наступне:
не 1, очікуваний результат. Це приклад обмежень чисел з плаваючою комою і 1) або ми маємо справу з цим, або 2) використовуємо інший тип даних (у цьому випадку краще було б або BigFloat
, або Rational
).
Примітка: Це сталося тому, що найближча з плаваючою комою до дробу 1/9 була трохи вище 1/9, а додавання 9 з цих чисел призводить до додаткової кількості
Якщо ви не знаєте, що у вас є причини обрати інше, виберіть Float64
для більшості чисел з плаваючою комою. З ним все ще існують помилки підтоку та переповнення, але, як ми побачимо в розділі XXXXX, загалом помилка округлення, пов'язана з числом з плаваючою комою, є більш згубною для обчислень.