返回列表 发帖

回复:考验大家的算法

/***********************************************************
**引用:
很简单,用C语言编写一个函数,实现四舍五入的功能!要求结构最简单!
function(float a){
int b

return b;
}

大家补充完整吧

[ Last edited by 紫色流星 on 2005-4-10 at 13:13 ]
************************************************************/
//本函数实现对一个正的float型数取四舍五入
//经过适当的完善可以对负的float型数去四舍五入
unsigned long function(float a)
{
           a+=0.5;
           return (unsigned long)a;
}

//望各位高手赐教!

呵呵~~不错!你是第一个做出来的!
欢迎光临我的个人空间:★四维空间★

TOP

呵呵
以前曾经做过

TOP

Originally posted by 天在下雨 at 2005-5-16 22:22:
呵呵
以前曾经做过

我以前考试过很多人,但是没有人能做出来~:(
欢迎光临我的个人空间:★四维空间★

TOP

//我改了一下,是不是对负数可以四舍五入了。
unsigned long function(float a)
{
           return (unsigned long)(a>0?a+0.5:a-0.5);
}
[color=red] 我到此N+1游. [/color]

TOP

///好象用有符号了。.
long Function(float a)
{
    return (long)(a>0?a+0.5:a-0.5);
}
[color=red] 我到此N+1游. [/color]

TOP

要不要考虑溢出?
[color=red] 我到此N+1游. [/color]

TOP

应该是要考虑溢出问题的
因为float型表示的数的范围比long型大的多了
这里应该是要假定输入的float型数在long型的范围之内

TOP

这里还存在一个问题,就是应该考虑实型数有效数字
int型:16位 表示范围:-32768~32765
unsigned int型:16位 表示范围:0~65535
long型:32位 表示范围:-2147483648~2147483647
unsigned long型:32位 表示范围:0~4294967295
float型:32位 表示范围:-3.402823E38到3.402823E38 (7个有效数字)
double型:64位 表示范围:-1.79E308到1.79E308 (16个有效数字)
这里的E表示以10位底的N次幂
这样当float型变量表示的数小于-1 000 000或大于1 000 000时(即整数部分有7位)就没有小数部分了。也就是说当float型变量表示的范围虽然很大,但是当其表示的数很大时,误差也大了,可能就根本精确不到小数位了,只能保证高7位(10进制)是准确的。
double型亦如此,当整数部分达到16位时也没有小数部分了。

所以只有对-999999.9~999999.9范围内的float型数取四舍五入才有意义。
要想对更宽范围内的数取四舍五入那就要自己定义一种数据类型了。

TOP

楼上强,仰视一下。
[color=red] 我到此N+1游. [/color]

TOP

返回列表