Trait integrustio::utils::GoFloatMath
source · [−]pub trait GoFloatMath: BaseFloat {
fn remainder(self, y: Self) -> Self;
fn modulo(self, y: Self) -> Self;
}
Required Methods
Implementations on Foreign Types
sourceimpl GoFloatMath for f64
impl GoFloatMath for f64
sourcefn remainder(self, y: f64) -> f64
fn remainder(self, y: f64) -> f64
The original C code and the comment below are from FreeBSD’s /usr/src/lib/msun/src/e_remainder.c and came with this notice. The go code is a simplified version of the original C.
====================================================
Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
Developed at SunPro, a Sun Microsystems, Inc. business. Permission to use, copy, modify, and distribute this software is freely granted, provided that this notice is preserved.
====================================================
__ieee754_remainder(x,y)
Return : returns x REM y = x - [x/y]*y as if in infinite precision arithmetic, where [x/y] is the (infinite bit) integer nearest x/y (in half way cases, choose the even one).
Method : Based on Mod() returning x - [x/y]chopped * y exactly.
Remainder returns the IEEE 754 floating-point remainder of x/y.
Special cases are:
Remainder(±Inf, y) = NaN
Remainder(NaN, y) = NaN
Remainder(x, 0) = NaN
Remainder(x, ±Inf) = x
Remainder(x, NaN) = NaN
sourcefn modulo(self, y: f64) -> f64
fn modulo(self, y: f64) -> f64
Floating-point mod function.
Modulo returns the floating-point remainder of x/y. The magnitude of the result is less than y and its sign agrees with that of x.
Special cases are:
Mod(±Inf, y) = NaN
Mod(NaN, y) = NaN
Mod(x, 0) = NaN
Mod(x, ±Inf) = x
Mod(x, NaN) = NaN