Source File
remainder.go
Belonging Package
math
// Copyright 2010 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
// The original C code and the comment below are from
// FreeBSD's /usr/src/lib/msun/src/e_remainder.c and came
// with this notice. The go code is a simplified version of
// the original C.
//
// ====================================================
// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
//
// Developed at SunPro, a Sun Microsystems, Inc. business.
// Permission to use, copy, modify, and distribute this
// software is freely granted, provided that this notice
// is preserved.
// ====================================================
//
// __ieee754_remainder(x,y)
// Return :
// returns x REM y = x - [x/y]*y as if in infinite
// precision arithmetic, where [x/y] is the (infinite bit)
// integer nearest x/y (in half way cases, choose the even one).
// Method :
// Based on Mod() returning x - [x/y]chopped * y exactly.
// Remainder returns the IEEE 754 floating-point remainder of x/y.
//
// Special cases are:
//
// Remainder(±Inf, y) = NaN
// Remainder(NaN, y) = NaN
// Remainder(x, 0) = NaN
// Remainder(x, ±Inf) = x
// Remainder(x, NaN) = NaN
func (, float64) float64 {
if haveArchRemainder {
return archRemainder(, )
}
return remainder(, )
}
func remainder(, float64) float64 {
const (
= 4.45014771701440276618e-308 // 0x0020000000000000
= MaxFloat64 / 2
)
// special cases
switch {
case IsNaN() || IsNaN() || IsInf(, 0) || == 0:
return NaN()
case IsInf(, 0):
return
}
:= false
if < 0 {
= -
= true
}
if < 0 {
= -
}
if == {
if {
:= 0.0
return -
}
return 0
}
if <= {
= Mod(, +) // now x < 2y
}
if < {
if + > {
-=
if + >= {
-=
}
}
} else {
:= 0.5 *
if > {
-=
if >= {
-=
}
}
}
if {
= -
}
return
}
The pages are generated with Golds v0.7.0-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |