// 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. package math // Floor returns the greatest integer value less than or equal to x. // // Special cases are: // Floor(+Inf) = +Inf // Floor(-Inf) = -Inf // Floor(NaN) = NaN func Floor(x float64) float64 { // TODO(rsc): Remove manual inlining of IsNaN, IsInf // when compiler does it for us if x == 0 || x != x || x > MaxFloat64 || x < -MaxFloat64 { // x == 0 || IsNaN(x) || IsInf(x, 0) return x } if x < 0 { d, fract := Modf(-x) if fract != 0.0 { d = d + 1 } return -d } d, _ := Modf(x) return d } // Ceil returns the least integer value greater than or equal to x. // // Special cases are: // Ceil(+Inf) = +Inf // Ceil(-Inf) = -Inf // Ceil(NaN) = NaN func Ceil(x float64) float64 { return -Floor(-x) } // Trunc returns the integer value of x. // // Special cases are: // Trunc(+Inf) = +Inf // Trunc(-Inf) = -Inf // Trunc(NaN) = NaN func Trunc(x float64) float64 { // TODO(rsc): Remove manual inlining of IsNaN, IsInf // when compiler does it for us if x == 0 || x != x || x > MaxFloat64 || x < -MaxFloat64 { // x == 0 || IsNaN(x) || IsInf(x, 0) return x } d, _ := Modf(x) return d }