一个关于sqrt函数的问题

Mingci_why 2009-09-24 09:14:42
#include <stdio.h> 
#include <cmath>
int main()
{
printf("%f\n",sqrt(25));
}

跟号25不是等于5吗,可为什么输出0?

...全文
813 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈思有 2011-05-10
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <math.h>

void main()
{
int i,j,n,r;

for ( i=0; i<10; i++ )
{
for ( j=0; j<10; j++ )
{
n = i*1000+i*100+j*10+j;
for ( r=32; r<100; r++ ) /*平方大于1000的最小的数是32*/
{
if ( r*r == n )
printf("%d\n",n);
}
}
}
}
liem 2009-09-25
  • 打赏
  • 举报
回复
sqrt函数返回值为double,在vc6中输入输出double使用格式符"%lf",否则,有可能显示不正确。
zzhzhua 2009-09-24
  • 打赏
  • 举报
回复
在32位机器中,int型为4字节,在Stack中分配4字节的内存单元。
而printf中“%f”说明符,认为参数是double型的。(在printf中,float型会自动转换成double型)。
类型 数值 计算机中对应的二进制存储
int 5 -- 00000000 00000000 00000000 00000101
float 5.0 -- 01000010 00000101 00000000 00000000
如果直接将整型5的值不加转换而当做float型的话
那么实际对应的值就是1.0000000 00000000 00000101 * 2(-127)

2(-127)意即2的-127次方

对应的实际上是一个非常非常小的值
lingyin55 2009-09-24
  • 打赏
  • 举报
回复
楼主msdn查下sqrt的参数和返回值
wendll 2009-09-24
  • 打赏
  • 举报
回复
printf("%f",5) ;

在vc 6.0输出也为0.0000


float a = (float)5 ;
printf("%f",a) ;

结果也是0.00

浮点数是如何存储的呢?目前已知的所有的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。下面来看一下具体的float的规格:
float 共计32位,折合4字节
由最高到最低位分别是第31、30、29、……、0位
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。

int也看作32位的话,其转换二进制然后与float位相对应,你就不难发现为什么程序输出的是0.0000了
mstlq 2009-09-24
  • 打赏
  • 举报
回复

#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
printf("%f\n",sqrt(25));
return 0;
}
wanjingwei 2009-09-24
  • 打赏
  • 举报
回复

printf("%f\n",sqrt((double)25));
输出5.000000
机智的呆呆 2009-09-24
  • 打赏
  • 举报
回复
试试~~

printf("%f\n",sqrt(25.0f));

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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