summaryrefslogtreecommitdiff
path: root/src/pkg/math/fmod.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/math/fmod.go')
-rw-r--r--src/pkg/math/fmod.go16
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