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:

committed by
GitHub

parent
dd486bb0fb
commit
1cfc4198f5
29
vlib/math/modf.v
Normal file
29
vlib/math/modf.v
Normal 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
|
||||
}
|
Reference in New Issue
Block a user