Треки
/
Rust
Rust
/
Салабус
/
Числа з плаваючою комою
Чи

Числа з плаваючою комою у Rust

1 вправа

Про концепцію Числа з плаваючою комою

Числа з плавачою комою належать до дійсних чисел: вони можуть мати дробову частину. У машині вони подаються як набір двійкових бітів згідно зі специфікацією IEEE-754. Числа з плаваючою комою часто називають просто «float».

Числа з плаваючою комою завжди знакові. Знаковість означає, що один із бітів числа відведено для позначення того, чи є це число відʼємним.

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

У Rust є два примітивні типи чисел з плаваючою комою: f32 і f64. Число після f вказує на бітову ширину. В інших мовах f32 іноді називають «одинарною точністю», а f64 іноді називають «подвійною точністю».

Що ж використовувати?

Загалом варто використовувати f64: на більшості сучасних споживчих пристроїв він такий самий швидкий, як f32, і значно зменшує ймовірність неточності чисел з плаваючою комою.

Якщо потрібні раціональні числа з нескінченною точністю, можна скористатися крейтом num-rational, який надає тип BigRational. Якщо потрібні десяткові числа з фіксованою точністю, можна скористатися крейтом rust_decimal, який надає тип Decimal.

Перетворення між числами з плаваючою комою

У Rust немає неявних числових перетворень. Якщо потрібно привести одне число з плаваючою комою до іншого типу, є дві основні стратегії: ключове слово as, а також трейти From і TryFrom.

Використання ключового слова as просте: expr as Type. Однак із приведеннями через as повʼязано чимало застережень і тонкощів, про які слід памʼятати.

Приведення на основі трейтів трохи складніше, але безпечніше: трейти перетворення реалізовано лише там, де вони безпечні. Наприклад, f32 реалізує From<u8>, From<u16>, From<i8> і From<i16>: будь-яке значення, подаване будь-яким із цих типів, гарантовано можна подати і як f32. Це можна використати як f32::from(expr) або expr.into(), де expr належить до одного з цих типів.

Під час перетворення чисел з плаваючою комою приведення через as часто є кращим просто тому, що реалізацій приведення на основі трейтів порівняно мало. Станом на жовтень 2020 року TryFrom не реалізовано для чисел з плаваючою комою. Приведення з f32 до f64 через as відбувається без втрат. Зворотне приведення відбувається з втратами, але має визначений протокол приведення, покликаний звести втрати до мінімуму.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці