diff options
Diffstat (limited to 'src/pkg/math/fmod.go')
-rw-r--r-- | src/pkg/math/fmod.go | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/pkg/math/fmod.go b/src/pkg/math/fmod.go index cff9ae497..fc57f7483 100644 --- a/src/pkg/math/fmod.go +++ b/src/pkg/math/fmod.go @@ -1,4 +1,4 @@ -// Copyright 2009 The Go Authors. All rights reserved. +// Copyright 2009-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. @@ -6,13 +6,21 @@ package math /* - Floating-point mod func without infinity or NaN checking + Floating-point mod function. */ // Fmod returns the floating-point remainder of x/y. +// The magnitude of the result is less than y and its +// sign agrees with that of x. +// +// Special cases are: +// if x is not finite, Fmod returns NaN +// if y is 0 or NaN, Fmod returns NaN func Fmod(x, y float64) float64 { - if y == 0 { - return x + // TODO(rsc): Remove manual inlining of IsNaN, IsInf + // when compiler does it for us. + if y == 0 || x > MaxFloat64 || x < -MaxFloat64 || x != x || y != y { // y == 0 || IsInf(x, 0) || IsNaN(x) || IsNan(y) + return NaN() } if y < 0 { y = -y |