回复:考验大家的算法
/*************************************************************引用:
很简单,用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;
}
//望各位高手赐教! 呵呵~~不错!你是第一个做出来的! 呵呵
以前曾经做过 [quote]Originally posted by [i]天在下雨[/i] at 2005-5-16 22:22:
呵呵
以前曾经做过 [/quote]
我以前考试过很多人,但是没有人能做出来~:( //我改了一下,是不是对负数可以四舍五入了。
unsigned long function(float a)
{
return (unsigned long)(a>0?a+0.5:a-0.5);
} ///好象用有符号了。.
long Function(float a)
{
return (long)(a>0?a+0.5:a-0.5);
} 要不要考虑溢出? 应该是要考虑溢出问题的
因为float型表示的数的范围比long型大的多了
这里应该是要假定输入的float型数在long型的范围之内 这里还存在一个问题,就是应该考虑实型数有效数字
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型数取四舍五入才有意义。
要想对更宽范围内的数取四舍五入那就要自己定义一种数据类型了。 楼上强,仰视一下。 用不着分析的这么透彻吧?
我发这个算法的目的就是为了让大家对自己的算法能做到精益求精~
不是为了发表论文~hoho ~
页:
[1]