mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			37 lines
		
	
	
		
			796 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			796 B
		
	
	
	
		
			Go
		
	
	
	
// 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) {
 | 
						|
	return modf(f)
 | 
						|
}
 | 
						|
 | 
						|
func modf(f float64) (int float64, frac float64) {
 | 
						|
	if f < 1 {
 | 
						|
		if f < 0 {
 | 
						|
			int, frac = Modf(-f)
 | 
						|
			return -int, -frac
 | 
						|
		}
 | 
						|
		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
 | 
						|
}
 |