跪求高手,,为什么总是-0.000000

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define FEN 100000
void main()
{
long double x=0,y,s,i,w=2;
for(i=w/FEN;i<=w;i=i+w/FEN)
{
y=(long double) sqrt(3-3*i*i/4);
s=w/FEN*y;
x=s+x;
}
printf("%f\n",4*x);
getchar();
clrscr();
}
最新回答
梦中梦

2024-09-21 02:59:03

printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。这点就和huhugo88所说一样,5在内存中为00000000,00000101。而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0

之所以Vc中不允许这种情况,而有些编译器就允许这么输出就是编译器设置的问题。按理说,这样访问内存是属于越界访问,应该禁止。不过只是读,伤害性不大而已。