Printf打印可疑的大浮点

时间:2019-05-29 20:35:23

标签: c floating-point printf

因此,当前我正在尝试打印包含一些未初始化的浮点值的浮点数组(float *)。不知何故,它在我的控制台中显示了这样的值(使用“%d:%f \ n”作为格式):

-0.000000
0.000000
68509253839697691852885035134612406272.000000
0.000000
-0.000000
0.000000

这对我来说毫无意义。浮动怎么这么长? 同样,在一种非常类似的情况下,即我使用格式为“%5.1f”的sprintf来“ toString”一个矩阵,我的程序被中止(“第11行:1294中止陷阱:6”):

void mat_print(char * buf, matptr_t mat) {
  char numbuf[10] = {0};
  strcpy(buf, "");

  for(uint32_t y = 0, ystop = mat->h; y < ystop; y++) {
    strcat(buf, y == 0? "[ " : "\n[ ");
    for(uint32_t x = 0, xstop = mat->w; x < xstop; x++) {
      // on x = 2, i get an abort
      sprintf(numbuf, "% 5.1f ", mat_get(mat, y, x));
      strcat(buf, numbuf);
    }
    strcat(buf, "]");
  }
}

在这里,我试图从矩阵对象获取值

struct matrix {
  uint32_t h, w;
  float * matrix;
};
typedef struct matrix * matptr_t;

具有一个名为mat_get

的函数
inline float mat_get(matptr_t mat, uint32_t y, uint32_t x) {
  return mat->matrix [y * mat->w + x];
}

矩阵浮点指针数组指向矩阵本身旁边的已分配区域,其所有内容均一口气分配:

matptr_t matrix(uint32_t h, uint32_t w) {
  // nn_allocator is a function pointer to malloc
  matptr_t mat = (matptr_t) nn_allocator(sizeof(struct matrix) + h * w * sizeof(float));
  mat->h = h;
  mat->w = w;
  mat->matrix = (void *)mat + sizeof(struct matrix);
  return mat;
}

大型浮子上印有:

// matptr is a pointer to a matrix object
float * values = (matptr)->matrix;
for(uint32_t i = 0, stop = (matptr)->w * (matptr)->h; i < stop; i++, values++) {
  printf("%d: %f\n", i, *values);
}

所以问题是:如何修复此代码,使其不再中止我的程序?为什么浮动时间这么长?

在此先感谢您的帮助。

0 个答案:

没有答案