1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

vlib/math: Add a pure V backend for vlib/math (#11267)

This commit is contained in:
Ulises Jeremias Cornejo Fandos
2021-08-22 18:35:28 -03:00
committed by GitHub
parent dd486bb0fb
commit 1cfc4198f5
67 changed files with 3805 additions and 1798 deletions

29
vlib/math/modf.v Normal file
View File

@ -0,0 +1,29 @@
module math
const (
modf_maxpowtwo = 4.503599627370496000e+15
)
// modf returns integer and fractional floating-point numbers
// that sum to f. Both values have the same sign as f.
//
// special cases are:
// modf(±inf) = ±inf, nan
// modf(nan) = nan, nan
pub fn modf(f f64) (f64, f64) {
abs_f := abs(f)
mut i := 0.0
if abs_f >= math.modf_maxpowtwo {
i = f // it must be an integer
} else {
i = abs_f + math.modf_maxpowtwo // shift fraction off right
i -= math.modf_maxpowtwo // shift back without fraction
for i > abs_f { // above arithmetic might round
i -= 1.0 // test again just to be sure
}
if f < 0.0 {
i = -i
}
}
return i, f - i // signed fractional part
}