Trait Float

Source
pub trait Float: Sized {
Show 39 methods // Required methods fn floor(self) -> Self; fn ceil(self) -> Self; fn round(self) -> Self; fn trunc(self) -> Self; fn fract(self) -> Self; fn abs(self) -> Self; fn signum(self) -> Self; fn copysign(self, y: Self) -> Self; fn mul_add(self, a: Self, b: Self) -> Self; fn div_euc(self, rhs: Self) -> Self; fn mod_euc(self, rhs: Self) -> Self; fn powi(self, n: i32) -> Self; fn powf(self, n: Self) -> Self; fn sqrt(self) -> Self; fn exp(self) -> Self; fn exp2(self) -> Self; fn ln(self) -> Self; fn log(self, base: Self) -> Self; fn log2(self) -> Self; fn log10(self) -> Self; fn abs_sub(self, other: Self) -> Self; fn cbrt(self) -> Self; fn hypot(self, other: Self) -> Self; fn sin(self) -> Self; fn cos(self) -> Self; fn tan(self) -> Self; fn asin(self) -> Self; fn acos(self) -> Self; fn atan(self) -> Self; fn atan2(self, other: Self) -> Self; fn sin_cos(self) -> (Self, Self) where Self: Sized; fn exp_m1(self) -> Self; fn ln_1p(self) -> Self; fn sinh(self) -> Self; fn cosh(self) -> Self; fn tanh(self) -> Self; fn asinh(self) -> Self; fn acosh(self) -> Self; fn atanh(self) -> Self;
}
Expand description

Copy and pasted from Rust std

Required Methods§

Source

fn floor(self) -> Self

Returns the largest integer less than or equal to a number.

§Examples
let f = 3.99_f64;
let g = 3.0_f64;

assert_eq!(f.floor(), 3.0);
assert_eq!(g.floor(), 3.0);
Source

fn ceil(self) -> Self

Returns the smallest integer greater than or equal to a number.

§Examples
let f = 3.01_f64;
let g = 4.0_f64;

assert_eq!(f.ceil(), 4.0);
assert_eq!(g.ceil(), 4.0);
Source

fn round(self) -> Self

Returns the nearest integer to a number. Round half-way cases away from 0.0.

§Examples
let f = 3.3_f64;
let g = -3.3_f64;

assert_eq!(f.round(), 3.0);
assert_eq!(g.round(), -3.0);
Source

fn trunc(self) -> Self

Returns the integer part of a number.

§Examples
let f = 3.3_f64;
let g = -3.7_f64;

assert_eq!(f.trunc(), 3.0);
assert_eq!(g.trunc(), -3.0);
Source

fn fract(self) -> Self

Returns the fractional part of a number.

§Examples
let x = 3.5_f64;
let y = -3.5_f64;
let abs_difference_x = (x.fract() - 0.5).abs();
let abs_difference_y = (y.fract() - (-0.5)).abs();

assert!(abs_difference_x < 1e-10);
assert!(abs_difference_y < 1e-10);
Source

fn abs(self) -> Self

Computes the absolute value of self. Returns NAN if the number is NAN.

§Examples
use std::f64;

let x = 3.5_f64;
let y = -3.5_f64;

let abs_difference_x = (x.abs() - x).abs();
let abs_difference_y = (y.abs() - (-y)).abs();

assert!(abs_difference_x < 1e-10);
assert!(abs_difference_y < 1e-10);

assert!(f64::NAN.abs().is_nan());
Source

fn signum(self) -> Self

Returns a number that represents the sign of self.

  • 1.0 if the number is positive, +0.0 or INFINITY
  • -1.0 if the number is negative, -0.0 or NEG_INFINITY
  • NAN if the number is NAN
§Examples
use std::f64;

let f = 3.5_f64;

assert_eq!(f.signum(), 1.0);
assert_eq!(f64::NEG_INFINITY.signum(), -1.0);

assert!(f64::NAN.signum().is_nan());
Source

fn copysign(self, y: Self) -> Self

Returns a number composed of the magnitude of self and the sign of y.

Equal to self if the sign of self and y are the same, otherwise equal to -self. If self is a NAN, then a NAN with the sign of y is returned.

§Examples
#![feature(copysign)]
use std::f64;

let f = 3.5_f64;

assert_eq!(f.copysign(0.42), 3.5_f64);
assert_eq!(f.copysign(-0.42), -3.5_f64);
assert_eq!((-f).copysign(0.42), 3.5_f64);
assert_eq!((-f).copysign(-0.42), -3.5_f64);

assert!(f64::NAN.copysign(1.0).is_nan());
Source

fn mul_add(self, a: Self, b: Self) -> Self

Fused multiply-add. Computes (self * a) + b with only one rounding error, yielding a more accurate result than an unfused multiply-add.

Using mul_add can be more performant than an unfused multiply-add if the target architecture has a dedicated fma CPU instruction.

§Examples
let m = 10.0_f64;
let x = 4.0_f64;
let b = 60.0_f64;

// 100.0
let abs_difference = (m.mul_add(x, b) - (m*x + b)).abs();

assert!(abs_difference < 1e-10);
Source

fn div_euc(self, rhs: Self) -> Self

Calculates Euclidean division, the matching method for mod_euc.

This computes the integer n such that self = n * rhs + self.mod_euc(rhs). In other words, the result is self / rhs rounded to the integer n such that self >= n * rhs.

§Examples
#![feature(euclidean_division)]
let a: f64 = 7.0;
let b = 4.0;
assert_eq!(a.div_euc(b), 1.0); // 7.0 > 4.0 * 1.0
assert_eq!((-a).div_euc(b), -2.0); // -7.0 >= 4.0 * -2.0
assert_eq!(a.div_euc(-b), -1.0); // 7.0 >= -4.0 * -1.0
assert_eq!((-a).div_euc(-b), 2.0); // -7.0 >= -4.0 * 2.0
Source

fn mod_euc(self, rhs: Self) -> Self

Calculates the Euclidean modulo (self mod rhs), which is never negative.

In particular, the return value r satisfies 0.0 <= r < rhs.abs() in most cases. However, due to a floating point round-off error it can result in r == rhs.abs(), violating the mathematical definition, if self is much smaller than rhs.abs() in magnitude and self < 0.0. This result is not an element of the function’s codomain, but it is the closest floating point number in the real numbers and thus fulfills the property self == self.div_euc(rhs) * rhs + self.mod_euc(rhs) approximatively.

§Examples
#![feature(euclidean_division)]
let a: f64 = 7.0;
let b = 4.0;
assert_eq!(a.mod_euc(b), 3.0);
assert_eq!((-a).mod_euc(b), 1.0);
assert_eq!(a.mod_euc(-b), 3.0);
assert_eq!((-a).mod_euc(-b), 1.0);
// limitation due to round-off error
assert_ne!((-std::f64::EPSILON).mod_euc(3.0), 0.0);
Source

fn powi(self, n: i32) -> Self

Raises a number to an integer power.

Using this function is generally faster than using powf

§Examples
let x = 2.0_f64;
let abs_difference = (x.powi(2) - x*x).abs();

assert!(abs_difference < 1e-10);
Source

fn powf(self, n: Self) -> Self

Raises a number to a floating point power.

§Examples
let x = 2.0_f64;
let abs_difference = (x.powf(2.0) - x*x).abs();

assert!(abs_difference < 1e-10);
Source

fn sqrt(self) -> Self

Takes the square root of a number.

Returns NaN if self is a negative number.

§Examples
let positive = 4.0_f64;
let negative = -4.0_f64;

let abs_difference = (positive.sqrt() - 2.0).abs();

assert!(abs_difference < 1e-10);
assert!(negative.sqrt().is_nan());
Source

fn exp(self) -> Self

Returns e^(self), (the exponential function).

§Examples
let one = 1.0_f64;
// e^1
let e = one.exp();

// ln(e) - 1 == 0
let abs_difference = (e.ln() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn exp2(self) -> Self

Returns 2^(self).

§Examples
let f = 2.0_f64;

// 2^2 - 4 == 0
let abs_difference = (f.exp2() - 4.0).abs();

assert!(abs_difference < 1e-10);
Source

fn ln(self) -> Self

Returns the natural logarithm of the number.

§Examples
let one = 1.0_f64;
// e^1
let e = one.exp();

// ln(e) - 1 == 0
let abs_difference = (e.ln() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn log(self, base: Self) -> Self

Returns the logarithm of the number with respect to an arbitrary base.

The result may not be correctly rounded owing to implementation details; self.log2() can produce more accurate results for base 2, and self.log10() can produce more accurate results for base 10.

§Examples
let five = 5.0_f64;

// log5(5) - 1 == 0
let abs_difference = (five.log(5.0) - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn log2(self) -> Self

Returns the base 2 logarithm of the number.

§Examples
let two = 2.0_f64;

// log2(2) - 1 == 0
let abs_difference = (two.log2() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn log10(self) -> Self

Returns the base 10 logarithm of the number.

§Examples
let ten = 10.0_f64;

// log10(10) - 1 == 0
let abs_difference = (ten.log10() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn abs_sub(self, other: Self) -> Self

👎Deprecated: you probably meant (self - other).abs(): this operation is (self - other).max(0.0) (also known as fdim in C). If you truly need the positive difference, consider using that expression or the C function fdim, depending on how you wish to handle NaN (please consider filing an issue describing your use-case too).

The positive difference of two numbers.

  • If self <= other: 0:0
  • Else: self - other
§Examples
let x = 3.0_f64;
let y = -3.0_f64;

let abs_difference_x = (x.abs_sub(1.0) - 2.0).abs();
let abs_difference_y = (y.abs_sub(1.0) - 0.0).abs();

assert!(abs_difference_x < 1e-10);
assert!(abs_difference_y < 1e-10);
Source

fn cbrt(self) -> Self

Takes the cubic root of a number.

§Examples
let x = 8.0_f64;

// x^(1/3) - 2 == 0
let abs_difference = (x.cbrt() - 2.0).abs();

assert!(abs_difference < 1e-10);
Source

fn hypot(self, other: Self) -> Self

Calculates the length of the hypotenuse of a right-angle triangle given legs of length x and y.

§Examples
let x = 2.0_f64;
let y = 3.0_f64;

// sqrt(x^2 + y^2)
let abs_difference = (x.hypot(y) - (x.powi(2) + y.powi(2)).sqrt()).abs();

assert!(abs_difference < 1e-10);
Source

fn sin(self) -> Self

Computes the sine of a number (in radians).

§Examples
use std::f64;

let x = f64::consts::PI/2.0;

let abs_difference = (x.sin() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn cos(self) -> Self

Computes the cosine of a number (in radians).

§Examples
use std::f64;

let x = 2.0*f64::consts::PI;

let abs_difference = (x.cos() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn tan(self) -> Self

Computes the tangent of a number (in radians).

§Examples
use std::f64;

let x = f64::consts::PI/4.0;
let abs_difference = (x.tan() - 1.0).abs();

assert!(abs_difference < 1e-14);
Source

fn asin(self) -> Self

Computes the arcsine of a number. Return value is in radians in the range [-pi/2, pi/2] or NaN if the number is outside the range [-1, 1].

§Examples
use std::f64;

let f = f64::consts::PI / 2.0;

// asin(sin(pi/2))
let abs_difference = (f.sin().asin() - f64::consts::PI / 2.0).abs();

assert!(abs_difference < 1e-10);
Source

fn acos(self) -> Self

Computes the arccosine of a number. Return value is in radians in the range [0, pi] or NaN if the number is outside the range [-1, 1].

§Examples
use std::f64;

let f = f64::consts::PI / 4.0;

// acos(cos(pi/4))
let abs_difference = (f.cos().acos() - f64::consts::PI / 4.0).abs();

assert!(abs_difference < 1e-10);
Source

fn atan(self) -> Self

Computes the arctangent of a number. Return value is in radians in the range [-pi/2, pi/2];

§Examples
let f = 1.0_f64;

// atan(tan(1))
let abs_difference = (f.tan().atan() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn atan2(self, other: Self) -> Self

Computes the four quadrant arctangent of self (y) and other (x) in radians.

  • x = 0, y = 0: 0
  • x >= 0: arctan(y/x) -> [-pi/2, pi/2]
  • y >= 0: arctan(y/x) + pi -> (pi/2, pi]
  • y < 0: arctan(y/x) - pi -> (-pi, -pi/2)
§Examples
use std::f64;

let pi = f64::consts::PI;
// Positive angles measured counter-clockwise
// from positive x axis
// -pi/4 radians (45 deg clockwise)
let x1 = 3.0_f64;
let y1 = -3.0_f64;

// 3pi/4 radians (135 deg counter-clockwise)
let x2 = -3.0_f64;
let y2 = 3.0_f64;

let abs_difference_1 = (y1.atan2(x1) - (-pi/4.0)).abs();
let abs_difference_2 = (y2.atan2(x2) - 3.0*pi/4.0).abs();

assert!(abs_difference_1 < 1e-10);
assert!(abs_difference_2 < 1e-10);
Source

fn sin_cos(self) -> (Self, Self)
where Self: Sized,

Simultaneously computes the sine and cosine of the number, x. Returns (sin(x), cos(x)).

§Examples
use std::f64;

let x = f64::consts::PI/4.0;
let f = x.sin_cos();

let abs_difference_0 = (f.0 - x.sin()).abs();
let abs_difference_1 = (f.1 - x.cos()).abs();

assert!(abs_difference_0 < 1e-10);
assert!(abs_difference_1 < 1e-10);
Source

fn exp_m1(self) -> Self

Returns e^(self) - 1 in a way that is accurate even if the number is close to zero.

§Examples
let x = 7.0_f64;

// e^(ln(7)) - 1
let abs_difference = (x.ln().exp_m1() - 6.0).abs();

assert!(abs_difference < 1e-10);
Source

fn ln_1p(self) -> Self

Returns ln(1+n) (natural logarithm) more accurately than if the operations were performed separately.

§Examples
use std::f64;

let x = f64::consts::E - 1.0;

// ln(1 + (e - 1)) == ln(e) == 1
let abs_difference = (x.ln_1p() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source

fn sinh(self) -> Self

Hyperbolic sine function.

§Examples
use std::f64;

let e = f64::consts::E;
let x = 1.0_f64;

let f = x.sinh();
// Solving sinh() at 1 gives `(e^2-1)/(2e)`
let g = (e*e - 1.0)/(2.0*e);
let abs_difference = (f - g).abs();

assert!(abs_difference < 1e-10);
Source

fn cosh(self) -> Self

Hyperbolic cosine function.

§Examples
use std::f64;

let e = f64::consts::E;
let x = 1.0_f64;
let f = x.cosh();
// Solving cosh() at 1 gives this result
let g = (e*e + 1.0)/(2.0*e);
let abs_difference = (f - g).abs();

// Same result
assert!(abs_difference < 1.0e-10);
Source

fn tanh(self) -> Self

Hyperbolic tangent function.

§Examples
use std::f64;

let e = f64::consts::E;
let x = 1.0_f64;

let f = x.tanh();
// Solving tanh() at 1 gives `(1 - e^(-2))/(1 + e^(-2))`
let g = (1.0 - e.powi(-2))/(1.0 + e.powi(-2));
let abs_difference = (f - g).abs();

assert!(abs_difference < 1.0e-10);
Source

fn asinh(self) -> Self

Inverse hyperbolic sine function.

§Examples
let x = 1.0_f64;
let f = x.sinh().asinh();

let abs_difference = (f - x).abs();

assert!(abs_difference < 1.0e-10);
Source

fn acosh(self) -> Self

Inverse hyperbolic cosine function.

§Examples
let x = 1.0_f64;
let f = x.cosh().acosh();

let abs_difference = (f - x).abs();

assert!(abs_difference < 1.0e-10);
Source

fn atanh(self) -> Self

Inverse hyperbolic tangent function.

§Examples
use std::f64;

let e = f64::consts::E;
let f = e.tanh().atanh();

let abs_difference = (f - e).abs();

assert!(abs_difference < 1.0e-10);

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Float for f32

Source§

fn floor(self) -> f32

Source§

fn ceil(self) -> f32

Source§

fn round(self) -> f32

Source§

fn trunc(self) -> f32

Source§

fn fract(self) -> f32

Source§

fn abs(self) -> f32

Source§

fn signum(self) -> f32

Source§

fn copysign(self, y: f32) -> f32

Source§

fn mul_add(self, a: f32, b: f32) -> f32

Source§

fn div_euc(self, rhs: f32) -> f32

Source§

fn mod_euc(self, rhs: f32) -> f32

Source§

fn powi(self, n: i32) -> f32

Source§

fn powf(self, n: f32) -> f32

Source§

fn sqrt(self) -> f32

Source§

fn exp(self) -> f32

Source§

fn exp2(self) -> f32

Source§

fn ln(self) -> f32

Source§

fn log(self, base: f32) -> f32

Source§

fn log2(self) -> f32

Source§

fn log10(self) -> f32

Source§

fn abs_sub(self, other: f32) -> f32

👎Deprecated: you probably meant (self - other).abs(): this operation is (self - other).max(0.0) (also known as fdim in C). If you truly need the positive difference, consider using that expression or the C function fdim, depending on how you wish to handle NaN (please consider filing an issue describing your use-case too).
Source§

fn cbrt(self) -> f32

Source§

fn hypot(self, other: f32) -> f32

Source§

fn sin(self) -> f32

Source§

fn cos(self) -> f32

Source§

fn tan(self) -> f32

Source§

fn asin(self) -> f32

Source§

fn acos(self) -> f32

Source§

fn atan(self) -> f32

Source§

fn atan2(self, other: f32) -> f32

Source§

fn sin_cos(self) -> (f32, f32)

Source§

fn exp_m1(self) -> f32

Source§

fn ln_1p(self) -> f32

Source§

fn sinh(self) -> f32

Source§

fn cosh(self) -> f32

Source§

fn tanh(self) -> f32

Source§

fn asinh(self) -> f32

Source§

fn acosh(self) -> f32

Source§

fn atanh(self) -> f32

Source§

impl Float for f64

Source§

fn floor(self) -> f64

Source§

fn ceil(self) -> f64

Source§

fn round(self) -> f64

Source§

fn trunc(self) -> f64

Source§

fn fract(self) -> f64

Source§

fn abs(self) -> f64

Source§

fn signum(self) -> f64

Source§

fn copysign(self, y: f64) -> f64

Source§

fn mul_add(self, a: f64, b: f64) -> f64

Source§

fn div_euc(self, rhs: f64) -> f64

Source§

fn mod_euc(self, rhs: f64) -> f64

Source§

fn powi(self, n: i32) -> f64

Source§

fn powf(self, n: f64) -> f64

Source§

fn sqrt(self) -> f64

Source§

fn exp(self) -> f64

Source§

fn exp2(self) -> f64

Source§

fn ln(self) -> f64

Source§

fn log(self, base: f64) -> f64

Source§

fn log2(self) -> f64

Source§

fn log10(self) -> f64

Source§

fn abs_sub(self, other: f64) -> f64

👎Deprecated: you probably meant (self - other).abs(): this operation is (self - other).max(0.0) (also known as fdim in C). If you truly need the positive difference, consider using that expression or the C function fdim, depending on how you wish to handle NaN (please consider filing an issue describing your use-case too).
Source§

fn cbrt(self) -> f64

Source§

fn hypot(self, other: f64) -> f64

Source§

fn sin(self) -> f64

Source§

fn cos(self) -> f64

Source§

fn tan(self) -> f64

Source§

fn asin(self) -> f64

Source§

fn acos(self) -> f64

Source§

fn atan(self) -> f64

Source§

fn atan2(self, other: f64) -> f64

Source§

fn sin_cos(self) -> (f64, f64)

Source§

fn exp_m1(self) -> f64

Source§

fn ln_1p(self) -> f64

Source§

fn sinh(self) -> f64

Source§

fn cosh(self) -> f64

Source§

fn tanh(self) -> f64

Source§

fn asinh(self) -> f64

Source§

fn acosh(self) -> f64

Source§

fn atanh(self) -> f64

Implementors§