在C中分配双值意外地工作

时间:2015-10-31 17:36:51

标签: c double precision arithmetic-expressions

我曾尝试在SO上阅读很多问题,但我似乎无法理解为什么我的程序反应如此奇怪.. 我有这个简单的代码试图实现sqrt函数:

double sqrt,high,low,currNum;
scanf("%lf",&sqrt);
high = sqrt;
low = 0.0;
currNum = (high+low)/2.0;

调试并到达最后一行后的行后,我得到以下结果: sqrt等于6(这是输入的数字..) 高等于0(????)。 低等于0。 currnum等于6(???)。

我只是不了解这个值的行为...... 请帮忙吗?

1 个答案:

答案 0 :(得分:0)

  

我似乎无法理解为什么我的程序反应如此奇怪......我有这个简单的代码......

我会解释你的节目。此行在内存中保留四个空格,其中每个空格的大小为double,但没有为任何空间分配特定值。然后,您可以期望每个随机值。

double sqrt,high,low,currNum;

如果您想要将每个值设为零,请改用此行:

double sqrt=0,high=0,low=0,currNum=0;

此行读取并接受double类型的数字输入,并将值存储在sqrt变量中:

scanf("%lf",&sqrt);

将high设置为sqrt:

的值
high = sqrt;

这将低值设为0.0:

low = 0.0;

计算用户键入的内容之和,然后将总数除以一半(a.k.a。除以2),然后将结果存储在currNum变量中:

currNum = (high+low)/2.0;
  

在调试并到达最后一行之后的行之后,我得到以下结果:sqrt等于6(这是输入的数字..)high等于0(????)。低等于0. currnum等于6(???)。我只是不明白这个价值观的行为......请帮忙吗?

因为你将“低”设置为零,你在这里所做的是一个计算用户输入数字的一半的程序。

  

...尝试实现sqrt功能:

我确定如果您使用C库,您将获得良好的平方根函数。该程序打印9的平方根。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
  double x=sqrt(9);
  printf("%lf",x);
  return 0;
}