Home | History | Annotate | Download | only in math
      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 //	Modf(Inf) = Inf, NaN
     12 //	Modf(NaN) = NaN, NaN
     13 func Modf(f float64) (int float64, frac float64)
     14 
     15 func modf(f float64) (int float64, frac float64) {
     16 	if f < 1 {
     17 		switch {
     18 		case f < 0:
     19 			int, frac = Modf(-f)
     20 			return -int, -frac
     21 		case f == 0:
     22 			return f, f // Return -0, -0 when f == -0
     23 		}
     24 		return 0, f
     25 	}
     26 
     27 	x := Float64bits(f)
     28 	e := uint(x>>shift)&mask - bias
     29 
     30 	// Keep the top 12+e bits, the integer part; clear the rest.
     31 	if e < 64-12 {
     32 		x &^= 1<<(64-12-e) - 1
     33 	}
     34 	int = Float64frombits(x)
     35 	frac = f - int
     36 	return
     37 }
     38