【问题标题】:Double producing an odd output compared to float与浮点数相比,双倍产生奇数输出
【发布时间】:2012-11-28 02:48:36
【问题描述】:

我真的很想知道为什么当我使用双精度时这会搞砸我的代码。据我了解,双精度数只是一个更精确的浮点数。然而在下面的代码中,如果我将 float 替换为 double,我会得到一个古怪的输出,即使所有代码所做的只是获取输入并将其吐回。

#include <stdio.h>

int y;
int z;
int i;
int n;
int r;
int c;
float e;
float d;

void main() {
    puts("Enter Row Number:");
    scanf("%i", &r);
    puts("Enter Column Number:");
    scanf("%i", &c);
    float x[r][c];
    int j = r;

    for(y = 1; y <= r; y++) {
        for(z = 1; z <= c; z++) {
            scanf("%f", &x[y][z]);
        }
    }
    for (y = 1; y <= r; y++) {
        for(z = 1; z <= c; z++) {
            printf("%g\t", x[y][z]);
        }
        puts("\n");
    }
}

在使用浮点数的情况下,在行输入 2,列输入 3,然后是数字 1-6 后,我得到了 1-6 的输出,正如预期的那样。但是改用双精度并保持输入与以前相同,我得到的输出为 {1.36224e-312,1.78905e-307, 1.81506e-307, 3.15957e+263, 5.3568e-315, 3.44886e-313 }。显然,这甚至不接近正确,而且它不像我在这里处理复数......只是整数1-6。什么给了?

【问题讨论】:

  • 如果使用double,需要用%lf读取输入
  • 当您定义像x[r][c] 这样的数组时,该数组的有效索引为0..r-10..c-1
  • 我很惊讶您的代码不会产生分段错误,因为您从 1...r (r 数据结构的大小)进行迭代,而在 C 中,数组和矩阵的编号为 0 ...r-1
  • 我认为它不会产生分段错误,因为 segmetns 比单个浮点数大得多。它会在 Microsoft Visual C 等一些调试环境中触发错误,因为它会在每个数组后放置一个额外的空间来查看此类错误。但不是每个 C 编译器的一般情况。
  • 这是 nhahtdh 所说的。我不知道 scanf 需要一个不同的双打参数。 Jerry 和 Hernan,虽然你们俩都是正确的,但我之前已经注意到,由于某种原因,它似乎没有产生任何错误或导致任何问题,所以我就这样离开了。马虎,我知道。感谢您的帮助,我会尽快回答我自己的问题

标签: c


【解决方案1】:

scanf %f 需要float 的地址。使用scanf 直接将数据读取到非本地变量是很危险的,因为很难看出它实际上不是float。我会以这种方式更改代码以使其更健壮:

float temp;
scanf("%f", &temp);
x[y][x] = temp;

【讨论】:

    【解决方案2】:

    你的循环是错误的:

    for(y = 1; y <= r; y++) {
        for(z = 1; z <= c; z++) {
    

    当你定义一个数组时

    float x[r][c];
    

    数组的索引从零变为大小减一。所以x数组的y限制是

    x[0]  /* first sub-array */
    x[r - 1]  /* last sub-array */
    

    将循环更改为

    for(y = 0; y < r; y++) {
        for(z = 0; z < c; z++) {
    

    请注意,它们现在从零开始,而是使用小于比较运算符。

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2014-12-16
      • 2017-06-26
      • 1970-01-01
      相关资源
      最近更新 更多