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

薛浅书 2012-04-01 11:22:36
输出所有形如aabb的四位完平方全数。
#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()比较?
...全文
141 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
792199369 2012-04-07
  • 打赏
  • 举报
回复
运行的次数多了,误差就会很大
jixingzhong 2012-04-02
  • 打赏
  • 举报
回复
浮点数存在误差,但是这个误差是极小的。
floor(m+0.5)这种方式可以将精度控制到整数位。
qq120848369 2012-04-01
  • 打赏
  • 举报
回复
明确,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试一下即可。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧