Go Home Page
The Go Programming Language

Source file src/pkg/math/floor.go

// 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
}