round()&的区别是什么? trunc()函数?

时间:2010-05-25 10:36:58

标签: language-agnostic math background

我对这些功能感到很困惑?

2 个答案:

答案 0 :(得分:11)

在数学中,rounding表示舍入到最接近的整数,因此舍入3.4会得到3,舍入3.6会得到4。

另一方面,

Truncating意味着完全删除小数部分,因此3.4或3.6会导致3。

大多数编程语言和库也遵循这一点。

答案 1 :(得分:7)

在大多数编程语言中,

round( )trunc( )对应于IEEE-754标准指定的四种基本舍入模式中的两种。

四种舍入模式,相应的舍入函数以及它们在各种输入上的行为示例如下:

rounding mode       function [1]     results of rounding:
                                     0.2    1.7   -2.6   -3.3
---------------------------------------------------------------------------------
round to nearest    round( ) [2]     0.0    2.0   -3.0   -3.0
round to zero       trunc( )         0.0    1.0   -2.0   -3.0
round to +infinity  ceil( )          1.0    2.0   -2.0   -3.0
round to -infinity  floor( )         0.0    1.0   -3.0   -4.0

[1] IEEE-754标准不要求这些名称,并且并非所有语言都使用相同的名称。根据我的经验,这些仅仅是最常见的名称。

[2] C和C派生语言中的round( )函数与IEEE-754舍入到最接近的舍入模式并不完全对应。具体来说,它在处理确切的中途案例方面有所不同。 C round( )函数围绕“与零相关”,这可能是您在小学时学到的,但在某些计算中引入了偏差。 IEEE-754舍入到最近模式指定将关系四舍五入到最接近的偶数,这在保持确定性的同时不太可能引入偏差。