读书人

求解惑一个关于浮点误差的有关问题

发布时间: 2012-05-21 18:04:41 作者: rapoo

求解惑,一个关于浮点误差的问题。
输出所有形如aabb的四位完平方全数。

C/C++ code
#include <stdio.h>#include <math.h>int main(){    int a,b,num;    double m;    for(a=1; a<=9; a++)        for(b=0; b<=9; b++)        {            num=a*1100 + b*11;            m=sqrt(num);            if(floor(m+0.5)==m)   //请注意此处                printf("%.d\n",num);        }}

//注释处到底是怎么运行的?
难道是先把浮点型转换为整形再和floor()比较?

[解决办法]
明确,5*5=25, 4*4!=25, 4.8*4.8!=25 5.2*5.2!=25 ,但是有一个问题就是sqrt(25.0)不一定等于5.0,可能是4.999,可能是5.001,怎么办? 如果是4.999的情况,+0.5进上去取整试一下即可。
如果是5.001的情况,+0.5取整试一下即可。没了。

所以就是+0.5试一下即可。
[解决办法]
浮点数存在误差,但是这个误差是极小的。
floor(m+0.5)这种方式可以将精度控制到整数位。

读书人网 >C语言

热点推荐