【问题标题】:My code produces -nan on changing data type from float to double我的代码在将数据类型从浮点数更改为双精度时产生 -nan
【发布时间】:2016-09-10 15:16:08
【问题描述】:
int main(void) {
    float a;
    scanf("%f", &a);
    double c = sqrt(a);
    printf("%f", c);
    return 0;
}

浮点变量会产生正确的输出。 但是,将数据类型更改为双精度结果是 NaN。

【问题讨论】:

  • 您使用的是哪个编译器和操作系统?
  • 在进行双重输入时,您应该使用格式说明符 `%lf'。您可能没有这样做,这会导致 NaN。
  • "我的代码产生 -nan" 显示无需修改即可重现问题的代码。
  • @CodingBatman,但 OP 使用的是 float,而不是 double
  • @AlterMann,但在帖子下方,OP 说 关于将数据类型更改为双精度

标签: c compiler-errors nan


【解决方案1】:

您应该使用格式说明符%lf 来接收double

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

int main(void) {
    double a;
    scanf("%lf", &a);
    double c = sqrt(a);
    printf("%lf", c); //printf("%f", c) also works perfectly.
    return 0;
}

由于您可能只使用%f,因此您会得到 NaN。

【讨论】:

  • 变量 a 应该是浮点类型(如问题所述)
  • @AnishSharma,阅读问题下方的行 - 关于将数据类型更改为双精度 - 尽管我同意 OP 应该发布该代码。
  • 是的,我可以看到。他的问题是A float variable results in correct output. However, on changing the data type to double result is NaN > 他想将数据类型从浮点数更改为双精度而不是双精度数。您刚刚将一个 double 变量分配给另一个 double 变量。
  • @AnishSharma,他想将数据类型从 float 更改为 double 而不是 double 到 double 是什么意思? OP 将a 的数据类型更改为double,但没有更改scanf() 中的格式说明符,我指示他这样做。
  • 他使用double c 来声明变量。它的类型是 double 而不是 float。如何切换格式说明符?。
猜你喜欢
  • 2012-04-15
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
相关资源
最近更新 更多