lin
2025-06-05 ed3dd9d3e7519a82bb871d5eedb24a2fa0c91f47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
package math
 
// 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 float64) (int float64, frac float64)
 
func modf(f float64) (int float64, frac float64) {
   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 := Float64bits(f)
   e := uint(x>>shift)&mask - bias
 
   // Keep the top 12+e bits, the integer part; clear the rest.
   if e < 64-12 {
       x &^= 1<<(64-12-e) - 1
   }
   int = Float64frombits(x)
   frac = f - int
   return
}