src/pkg/math/mod.go - The Go Programming Language

Golang

Source file src/pkg/math/mod.go

     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	
    23	func mod(x, y float64) float64 {
    24		if y == 0 || IsInf(x, 0) || IsNaN(x) || IsNaN(y) {
    25			return NaN()
    26		}
    27		if y < 0 {
    28			y = -y
    29		}
    30	
    31		yfr, yexp := Frexp(y)
    32		sign := false
    33		r := x
    34		if x < 0 {
    35			r = -x
    36			sign = true
    37		}
    38	
    39		for r >= y {
    40			rfr, rexp := Frexp(r)
    41			if rfr < yfr {
    42				rexp = rexp - 1
    43			}
    44			r = r - Ldexp(y, rexp-yexp)
    45		}
    46		if sign {
    47			r = -r
    48		}
    49		return r
    50	}