github.com/ccccaoqing/test@v0.0.0-20220510085219-3985d23445c0/src/math/floor.go (about) 1 // Copyright 2009-2010 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package math 6 7 // Floor returns the greatest integer value less than or equal to x. 8 // 9 // Special cases are: 10 // Floor(±0) = ±0 11 // Floor(±Inf) = ±Inf 12 // Floor(NaN) = NaN 13 func Floor(x float64) float64 14 15 func floor(x float64) float64 { 16 if x == 0 || IsNaN(x) || IsInf(x, 0) { 17 return x 18 } 19 if x < 0 { 20 d, fract := Modf(-x) 21 if fract != 0.0 { 22 d = d + 1 23 } 24 return -d 25 } 26 d, _ := Modf(x) 27 return d 28 } 29 30 // Ceil returns the least integer value greater than or equal to x. 31 // 32 // Special cases are: 33 // Ceil(±0) = ±0 34 // Ceil(±Inf) = ±Inf 35 // Ceil(NaN) = NaN 36 func Ceil(x float64) float64 37 38 func ceil(x float64) float64 { 39 return -Floor(-x) 40 } 41 42 // Trunc returns the integer value of x. 43 // 44 // Special cases are: 45 // Trunc(±0) = ±0 46 // Trunc(±Inf) = ±Inf 47 // Trunc(NaN) = NaN 48 func Trunc(x float64) float64 49 50 func trunc(x float64) float64 { 51 if x == 0 || IsNaN(x) || IsInf(x, 0) { 52 return x 53 } 54 d, _ := Modf(x) 55 return d 56 }