]> Cypherpunks.ru repositories - gostls13.git/blob - src/math/modf.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / src / math / modf.go
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package math
6
7 // Modf returns integer and fractional floating-point numbers
8 // that sum to f. Both values have the same sign as f.
9 //
10 // Special cases are:
11 //
12 //      Modf(±Inf) = ±Inf, NaN
13 //      Modf(NaN) = NaN, NaN
14 func Modf(f float64) (int float64, frac float64) {
15         if haveArchModf {
16                 return archModf(f)
17         }
18         return modf(f)
19 }
20
21 func modf(f float64) (int float64, frac float64) {
22         if f < 1 {
23                 switch {
24                 case f < 0:
25                         int, frac = Modf(-f)
26                         return -int, -frac
27                 case f == 0:
28                         return f, f // Return -0, -0 when f == -0
29                 }
30                 return 0, f
31         }
32
33         x := Float64bits(f)
34         e := uint(x>>shift)&mask - bias
35
36         // Keep the top 12+e bits, the integer part; clear the rest.
37         if e < 64-12 {
38                 x &^= 1<<(64-12-e) - 1
39         }
40         int = Float64frombits(x)
41         frac = f - int
42         return
43 }