Примитивный тип f64

64-битный тип с плавающей запятой (конкретно тип "binary64", определённый в IEEE 754-2008).

Этот тип очень похож на f32, но имеет повышенную точность за счёт использования вдвое большего количества битов.

Константы

КонстантаЗначениеОписание
RADIX2u32Основание системы счисления внутреннего представления.
MANTISSA_DIGITS53u32Количество значащих цифр в системе счисления с основанием 2.
DIGITS15u32Приблизительное количество значащих цифр в десятичной системе счисления.
EPSILON2.2204460492503131E-16f64Машинное эпсилон для f64.
MIN-1.7976931348623157E+308f64Наименьшее конечное значение f64.
MIN_POSITIVE2.2250738585072014E-308f64Наименьшее положительное нормализованное значение f64.
MAX1.7976931348623157E+308f64Наибольшее конечное значение f64.
MIN_EXP-1021i32Минимальная возможная нормальная степень двойки.
MAX_EXP1024i32Максимальная возможная степень двойки.
MIN_10_EXP-307i32Минимальный x, для которого 10^x является нормальным.
MAX_10_EXP308i32Максимальный x, для которого 10^x является нормальным.
NANNaN_f64Не число (NaN).
INFINITY+Inf_f64Бесконечность (∞).
NEG_INFINITY-Inf_f64Отрицательная бесконечность (−∞).

Методы

Основные математические операции

МетодОписаниеКонстантностьВерсияПример
floor(self) -> f64Возвращает наибольшее целое число, меньшее или равное self.1.90.01.0.0assert_eq!(3.7_f64.floor(), 3.0);
ceil(self) -> f64Возвращает наименьшее целое число, большее или равное self.1.90.01.0.0assert_eq!(3.01_f64.ceil(), 4.0);
round(self) -> f64Возвращает ближайшее целое число к self.1.90.01.0.0assert_eq!(3.3_f64.round(), 3.0);
round_ties_even(self) -> f64Возвращает ближайшее целое число к числу. Половинные случаи округляются к числу с чётной младшей цифрой.1.90.01.77.0assert_eq!(3.5_f64.round_ties_even(), 4.0);
trunc(self) -> f64Возвращает целую часть self.1.90.01.0.0assert_eq!(3.7_f64.trunc(), 3.0);
fract(self) -> f64Возвращает дробную часть self.1.90.01.0.0let x = 3.6_f64; assert!(x.fract() - 0.6).abs() < 1e-10);
mul_add(self, a: f64, b: f64) -> f64Точное умножение-сложение. Вычисляет (self * a) + b с одной ошибкой округления.-1.0.0assert_eq!(10.0_f64.mul_add(4.0, 60.0), 100.0);
div_euclid(self, rhs: f64) -> f64Вычисляет евклидово деление.-1.38.0assert_eq!(7.0_f64.div_euclid(4.0), 1.0);
rem_euclid(self, rhs: f64) -> f64Вычисляет наименьший неотрицательный остаток от деления self на rhs.-1.38.0assert_eq!(7.0_f64.rem_euclid(4.0), 3.0);
powi(self, n: i32) -> f64Возводит число в целую степень.-1.0.0assert_eq!(2.0_f64.powi(2), 4.0);
powf(self, n: f64) -> f64Возводит число в степень с плавающей запятой.-1.0.0assert_eq!(2.0_f64.powf(2.0), 4.0);
sqrt(self) -> f64Возвращает квадратный корень числа.-1.0.0assert_eq!(4.0_f64.sqrt(), 2.0);
exp(self) -> f64Возвращает e^(self) (экспоненциальная функция).-1.0.0let e = 1.0_f64.exp();
exp2(self) -> f64Возвращает 2^(self).-1.0.0assert_eq!(2.0_f64.exp2(), 4.0);
ln(self) -> f64Возвращает натуральный логарифм числа.-1.0.0let e = 1.0_f64.exp(); assert!(e.ln() - 1.0).abs() < 1e-10);
log(self, base: f64) -> f64Возвращает логарифм числа по произвольному основанию.-1.0.0assert_eq!(25.0_f64.log(5.0), 2.0);
log2(self) -> f64Возвращает логарифм числа по основанию 2.-1.0.0assert_eq!(4.0_f64.log2(), 2.0);
log10(self) -> f64Возвращает логарифм числа по основанию 10.-1.0.0assert_eq!(100.0_f64.log10(), 2.0);
cbrt(self) -> f64Возвращает кубический корень числа.-1.0.0assert_eq!(8.0_f64.cbrt(), 2.0);
hypot(self, other: f64) -> f64Вычисляет расстояние между началом координат и точкой (x, y) на евклидовой плоскости.-1.0.0assert_eq!(3.0_f64.hypot(4.0), 5.0);
sin(self) -> f64Вычисляет синус числа (в радианах).-1.0.0assert_eq!(std::f64::consts::FRAC_PI_2.sin(), 1.0);
cos(self) -> f64Вычисляет косинус числа (в радианах).-1.0.0assert_eq!((2.0 * std::f64::consts::PI).cos(), 1.0);
tan(self) -> f64Вычисляет тангенс числа (в радианах).-1.0.0assert_eq!(std::f64::consts::FRAC_PI_4.tan(), 1.0);
asin(self) -> f64Вычисляет арксинус числа. Возвращаемое значение в радианах в диапазоне [-π/2, π/2].-1.0.0assert_eq!(1.0_f64.asin(), std::f64::consts::FRAC_PI_2);
acos(self) -> f64Вычисляет арккосинус числа. Возвращаемое значение в радианах в диапазоне [0, π].-1.0.0assert_eq!(1.0_f64.acos(), 0.0);
atan(self) -> f64Вычисляет арктангенс числа. Возвращаемое значение в радианах в диапазоне [-π/2, π/2].-1.0.0assert_eq!(1.0_f64.atan(), std::f64::consts::FRAC_PI_4);
atan2(self, other: f64) -> f64Вычисляет арктангенс self (y) и other (x) в радианах с учётом квадранта.-1.0.0assert_eq!(1.0_f64.atan2(1.0), std::f64::consts::FRAC_PI_4);
sin_cos(self) -> (f64, f64)Одновременно вычисляет синус и косинус числа.-1.0.0let (sin, cos) = std::f64::consts::FRAC_PI_4.sin_cos();
exp_m1(self) -> f64Возвращает e^(self) - 1 точно даже для чисел, близких к нулю.-1.0.0let x = 1e-16_f64; let approx = x + x * x / 2.0;
ln_1p(self) -> f64Возвращает ln(1+n) (натуральный логарифм) точнее, чем при раздельном выполнении операций.-1.0.0let x = 1e-16_f64; let approx = x - x * x / 2.0;
sinh(self) -> f64Гиперболический синус.-1.0.0let e = std::f64::consts::E; let x = 1.0_f64;
cosh(self) -> f64Гиперболический косинус.-1.0.0let e = std::f64::consts::E; let x = 1.0_f64;
tanh(self) -> f64Гиперболический тангенс.-1.0.0let e = std::f64::consts::E; let x = 1.0_f64;
asinh(self) -> f64Обратный гиперболический синус.-1.0.0assert_eq!(1.0_f64.sinh().asinh(), 1.0);
acosh(self) -> f64Обратный гиперболический косинус.-1.0.0assert_eq!(1.0_f64.cosh().acosh(), 1.0);
atanh(self) -> f64Обратный гиперболический тангенс.-1.0.0assert_eq!(std::f64::consts::FRAC_PI_6.tanh().atanh(), std::f64::consts::FRAC_PI_6);
gamma(self) -> f64Гамма-функция. (экспериментальный)-Nightlyassert_eq!(5.0f64.gamma(), 24.0);
ln_gamma(self) -> (f64, i32)Натуральный логарифм абсолютного значения гамма-функции. (экспериментальный)-Nightlyassert_eq!(2.0f64.ln_gamma().0, 0.0);
erf(self) -> f64Функция ошибок. (экспериментальный)-Nightlylet erf = (1.0 * std::f64::consts::FRAC_1_SQRT_2).erf();
erfc(self) -> f64Дополнительная функция ошибок. (экспериментальный)-Nightlylet x: f64 = 0.123; let one = x.erf() + x.erfc();

Проверка свойств чисел

МетодОписаниеКонстантностьВерсияПример
is_nan(self) -> boolВозвращает true, если значение равно NaN.1.83.01.0.0assert!(f64::NAN.is_nan());
is_infinite(self) -> boolВозвращает true, если значение является положительной или отрицательной бесконечностью.1.83.01.0.0assert!(f64::INFINITY.is_infinite());
is_finite(self) -> boolВозвращает true, если число не является ни бесконечностью, ни NaN.1.83.01.0.0assert!(7.0f64.is_finite());
is_subnormal(self) -> boolВозвращает true, если число субнормальное.1.83.01.53.0assert!(1.0e-308_f64.is_subnormal());
is_normal(self) -> boolВозвращает true, если число не является ни нулём, ни бесконечностью, ни субнормальным, ни NaN.1.83.01.0.0assert!(f64::MIN_POSITIVE.is_normal());
classify(self) -> FpCategoryВозвращает категорию числа с плавающей запятой.1.83.01.0.0assert_eq!(12.4_f64.classify(), FpCategory::Normal);
is_sign_positive(self) -> boolВозвращает true, если self имеет положительный знак.1.83.01.0.0assert!(7.0_f64.is_sign_positive());
is_sign_negative(self) -> boolВозвращает true, если self имеет отрицательный знак.1.83.01.0.0assert!((-7.0_f64).is_sign_negative());

Соседние значения и преобразования

МетодОписаниеКонстантностьВерсияПример
next_up(self) -> f64Возвращает наименьшее число, большее self.1.86.01.86.0assert_eq!(1.0f64.next_up(), 1.0 + f64::EPSILON);
next_down(self) -> f64Возвращает наибольшее число, меньшее self.1.86.01.86.0assert_eq!(1.0f64.next_down(), 1.0 - f64::EPSILON);
recip(self) -> f64Вычисляет обратное значение числа, 1/x.1.85.01.0.0assert_eq!(2.0_f64.recip(), 0.5);
to_degrees(self) -> f64Преобразует радианы в градусы.1.85.01.0.0assert_eq!(std::f64::consts::PI.to_degrees(), 180.0);
to_radians(self) -> f64Преобразует градусы в радианы.1.85.01.0.0assert_eq!(180.0_f64.to_radians(), std::f64::consts::PI);
max(self, other: f64) -> f64Возвращает максимум двух чисел, игнорируя NaN.1.85.01.0.0assert_eq!(1.0_f64.max(2.0), 2.0);
min(self, other: f64) -> f64Возвращает минимум двух чисел, игнорируя NaN.1.85.01.0.0assert_eq!(1.0_f64.min(2.0), 1.0);
maximum(self, other: f64) -> f64Возвращает максимум двух чисел, распространяя NaN. (экспериментальный)-Nightlyassert_eq!(1.0_f64.maximum(2.0), 2.0);
minimum(self, other: f64) -> f64Возвращает минимум двух чисел, распространяя NaN. (экспериментальный)-Nightlyassert_eq!(1.0_f64.minimum(2.0), 1.0);
midpoint(self, other: f64) -> f64Вычисляет среднюю точку (среднее арифметическое) между self и rhs.1.85.01.85.0assert_eq!(1.0f64.midpoint(4.0), 2.5);
to_int_unchecked<Int>(self) -> IntОкругляет к нулю и преобразует в любой примитивный целочисленный тип.-1.44.0unsafe { assert_eq!(4.6_f64.to_int_unchecked::<u16>(), 4); }

Работа с битовым представлением

МетодОписаниеКонстантностьВерсияПример
to_bits(self) -> u64Прямое преобразование в u64.1.83.01.20.0assert_eq!((12.5f64).to_bits(), 0x4029000000000000);
from_bits(v: u64) -> f64Прямое преобразование из u64.1.83.01.20.0assert_eq!(f64::from_bits(0x4029000000000000), 12.5);
to_be_bytes(self) -> [u8; 8]Возвращает представление числа в памяти в виде массива байтов в порядке big-endian.1.83.01.40.0let bytes = 12.5f64.to_be_bytes();
to_le_bytes(self) -> [u8; 8]Возвращает представление числа в памяти в виде массива байтов в порядке little-endian.1.83.01.40.0let bytes = 12.5f64.to_le_bytes();
to_ne_bytes(self) -> [u8; 8]Возвращает представление числа в памяти в виде массива байтов в порядке байтов целевой платформы.1.83.01.40.0let bytes = 12.5f64.to_ne_bytes();
from_be_bytes(bytes: [u8; 8]) -> f64Создаёт число из его представления в виде массива байтов в порядке big-endian.1.83.01.40.0let value = f64::from_be_bytes([0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
from_le_bytes(bytes: [u8; 8]) -> f64Создаёт число из его представления в виде массива байтов в порядке little-endian.1.83.01.40.0let value = f64::from_le_bytes([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x40]);
from_ne_bytes(bytes: [u8; 8]) -> f64Создаёт число из его представления в памяти в виде массива байтов в порядке байтов целевой платформы.1.83.01.40.0let value = f64::from_ne_bytes(...);

Сравнение и ограничение

МетодОписаниеКонстантностьВерсияПример
total_cmp(&self, other: &f64) -> OrderingВозвращает упорядочение между self и other в соответствии с предикатом totalOrder из IEEE 754.-1.62.0assert!(1.0_f64.total_cmp(&2.0).is_lt());
clamp(self, min: f64, max: f64) -> f64Ограничивает значение определённым интервалом, если оно не равно NaN.1.85.01.50.0assert_eq!((-3.0f64).clamp(-2.0, 1.0), -2.0);
abs(self) -> f64Вычисляет абсолютное значение self.1.85.01.0.0assert_eq!((-3.5_f64).abs(), 3.5);
signum(self) -> f64Возвращает число, представляющее знак self.1.85.01.0.0assert_eq!(3.5_f64.signum(), 1.0);
copysign(self, sign: f64) -> f64Возвращает число, состоящее из величины self и знака sign.1.85.01.35.0assert_eq!(3.5_f64.copysign(-0.42), -3.5_f64);

Алгебраические операции (экспериментальные)

МетодОписаниеКонстантностьВерсияПример
algebraic_add(self, rhs: f64) -> f64Сложение чисел с плавающей запятой, позволяющее оптимизации на основе алгебраических правил. (экспериментальный)-Nightly-
algebraic_sub(self, rhs: f64) -> f64Вычитание чисел с плавающей запятой, позволяющее оптимизации на основе алгебраических правил. (экспериментальный)-Nightly-
algebraic_mul(self, rhs: f64) -> f64Умножение чисел с плавающей запятой, позволяющее оптимизации на основе алгебраических правил. (экспериментальный)-Nightly-
algebraic_div(self, rhs: f64) -> f64Деление чисел с плавающей запятой, позволяющее оптимизации на основе алгебраических правил. (экспериментальный)-Nightly-
algebraic_rem(self, rhs: f64) -> f64Остаток от деления чисел с плавающей запятой, позволяющий оптимизации на основе алгебраических правил. (экспериментальный)-Nightly-

Устаревшие методы

МетодОписаниеВерсияСтатусПримечание
abs_sub(self, other: f64) -> f64Положительная разность двух чисел.1.0.0Устарело с 1.10.0Вероятно, вы имели в виду (self - other).abs()

Примечания о точности

Многие функции помечены как имеющие неопределённую точность - это означает, что их точность может варьироваться в зависимости от платформы, версии Rust и даже между вызовами в одном исполнении.

Некоторые функции (например, sqrt, mul_add) гарантируют точность в соответствии со стандартом IEEE 754.