| 1234567891011121314151617181920212223242526272829303132333435 |
- package math32
- // 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
- func Modf(f float32) (int float32, frac float32) {
- return modf(f)
- }
- func modf(f float32) (int float32, frac float32) {
- if f < 1 {
- switch {
- case f < 0:
- int, frac = Modf(-f)
- return -int, -frac
- case f == 0:
- return f, f // Return -0, -0 when f == -0
- }
- return 0, f
- }
- x := Float32bits(f)
- e := uint(x>>shift)&mask - bias
- // Keep the top 9+e bits, the integer part; clear the rest.
- if e < 32-9 {
- x &^= 1<<(32-9-e) - 1
- }
- int = Float32frombits(x)
- frac = f - int
- return
- }
|