...

Source file src/math/mod.go

Documentation: math

		 1  // Copyright 2009-2010 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  /*
		 8  	Floating-point mod function.
		 9  */
		10  
		11  // Mod returns the floating-point remainder of x/y.
		12  // The magnitude of the result is less than y and its
		13  // sign agrees with that of x.
		14  //
		15  // Special cases are:
		16  //	Mod(±Inf, y) = NaN
		17  //	Mod(NaN, y) = NaN
		18  //	Mod(x, 0) = NaN
		19  //	Mod(x, ±Inf) = x
		20  //	Mod(x, NaN) = NaN
		21  func Mod(x, y float64) float64 {
		22  	if haveArchMod {
		23  		return archMod(x, y)
		24  	}
		25  	return mod(x, y)
		26  }
		27  
		28  func mod(x, y float64) float64 {
		29  	if y == 0 || IsInf(x, 0) || IsNaN(x) || IsNaN(y) {
		30  		return NaN()
		31  	}
		32  	y = Abs(y)
		33  
		34  	yfr, yexp := Frexp(y)
		35  	r := x
		36  	if x < 0 {
		37  		r = -x
		38  	}
		39  
		40  	for r >= y {
		41  		rfr, rexp := Frexp(r)
		42  		if rfr < yfr {
		43  			rexp = rexp - 1
		44  		}
		45  		r = r - Ldexp(y, rexp-yexp)
		46  	}
		47  	if x < 0 {
		48  		r = -r
		49  	}
		50  	return r
		51  }
		52  

View as plain text