【问题标题】:Conversion of long long to long doublelong long 到 long double 的转换
【发布时间】:2014-09-30 20:43:00
【问题描述】:

我正在尝试将 long long 矩阵的第一行转换为 long double,但是当我打印结果时它只打印 0。这是函数:

void convertLLtoLD(long long **B, long double **C, int n){
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            C[i][j] = 0;
        }
    }

    for (i = 0; i < n; i++) {
        C[0][i] = B[0][i]; //C[0][i] = (long double)B[0][i];
    }
    for(i = 0; i < n; i++)
        printf("%lf ", C[0][i]);
}

这是我在调用函数之前分配 C 的代码:

long double** C = (long double**)malloc(n * sizeof(long double*));

for (i = 0; i < DIM; i++) {
    C[i] = (long double*)malloc(n * sizeof(long double));
}

我正在使用 GCC 4.8 编译代码。 B 是从文件中读取的,它的值是正确的,因为我在调用函数之前打印了它们。即使我在函数内打印它们,结果也是一样的。当我在评论中使用演员表时,结果也是一样的。有人能解释一下为什么它不起作用吗?

谢谢

【问题讨论】:

  • 你实际上想转换什么值?
  • "%lf " :将"%Lf " 用于long double
  • convertLLtoLD(() 中,您没有为 B 或 C 声明任何维度。它们都是指向数字的指针,而不是指向数字行或列的指针。
  • @Don'tYouWorryChild:为什么会这样?
  • @sop :我的错误,我没有注意到C 的类型是long double**。这样写就好了。

标签: c++ c type-conversion


【解决方案1】:

在声明中:

printf("%lf ", C[0][i]);

您使用了不正确的说明符(它需要 double)。

使用%Lf 打印long double,使用%lld 打印long long

注意:

【讨论】:

  • @mafso 我在打字时正在看它,不确定它的 UB(现在正在查看标准,但 en.cppref 文档说它是 double
  • 你说得对,它不是 UB,l 被明确定义为“对后面的 a、A、e、E、f、F、g 或 G 转换说明符没有影响。 " (C99 7.19.6.1 p.7/C11 7.21.6.1 p.7)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2017-11-29
相关资源
最近更新 更多