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
| }
|
|