// 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 != x || x > MaxFloat64 || x < -MaxFloat64 { // 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 != x || x > MaxFloat64 || x < -MaxFloat64 { // IsNaN(x) || IsInf(x, 0)
		return x
	}
	d, _ := Modf(x)
	return d
}
