对于此处对数据类型或 C 操作方式的任何误解,我深表歉意(我对学习还是比较陌生)。有人可以向我解释为什么我无法获得所需的输出(见下文)吗?
#include<stdio.h>
#include<math.h>
#define size 10
typedef unsigned int Uint16;
typedef long double float64;
Uint16 i;
float64 normalization = 0;
void main() {
for (i=0;i<size;i++)
{
normalization = normalization + i; // same as "normalization += i;"
printf("\n --------");
printf("\n normalization %f", normalization);
}
return;
}
控制台输出如下:
--------
normalization 0.000000
--------
normalization -0.000000
--------
normalization -2.000000
--------
normalization -2.000000
--------
normalization -0.000000
--------
normalization -3105036184601417900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
--------
normalization -0.000000
--------
normalization -26815615859885194000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
--------
normalization -0.000000
--------
normalization -0.000000
我期望输出是:
normalization = 0
normalization = 1
normalization = 3
normalization = 6
normalization = 10
normalization = 15
// and so forth...
最佳答案
这里的问题是格式说明符和参数类型不匹配,导致未定义的行为。
格式 %f
(以及 %lf
)用于普通 double
,而不是 long double
.
对于 long double
你需要使用 printf
格式的前缀 L
,如 %Lf
:
printf("normalization %Lf\n", normalization);
顺便说一句,请养成在输出中尾随换行的习惯。因为输出到 stdout
(这是 printf
写入的地方)默认情况下是 line 缓冲的,前导换行符可能导致意外的“丢失”输出。
关于c - 无法在 C 中打印 float64 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60303009/