【发布时间】:2021-12-31 00:03:39
【问题描述】:
我编写了这段代码来显示处理浮点数时的不准确性:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main() {
float sum1 = 0, sum2 = 0, sum3 = 0;
double sum4 = 0, sum5 = 0, sum6 = 0;
printf("%f + %f = $f\n", 0.1, 0.2, 0.1 + 0.2);
printf("%f + %f = $f\n", 0.1, 0.3, 0.1 + 0.2);
for (float i = 1; i <= 10000; i++) {
sum1 = sum1 + (1 / i);
}
for (double i = 1; i <= 10000; i++) {
sum4 = sum4 + (1 / i);
}
for (float i = 1; i <= 100000; i++) {
sum2 = sum2 + (1 / i);
}
for (double i = 1; i <= 100000; i++) {
sum5 = sum5 + (1 / i);
}
for (float i = 1; i <= 1000000; i++) {
sum3 = sum3 + (1 / i);
}
for (double i = 1; i <= 1000000; i++) {
sum6 = sum6 + (1 / i);
}
printf("%f \t %lf \n%f \t %lf \n%f \t %lf \n", sum1, sum4, sum2, sum5, sum3, sum6);
return 0;
}
尤其是部分
printf("%f + %f = $f\n", 0.1, 0.2, 0.1 + 0.2);
printf("%f + %f = $f\n", 0.1, 0.3, 0.1 + 0.2);
让我感到困惑,因为等号后的输出是 $f 我无法向自己解释。你能给我解释一下这句话的意思吗? 注意:我在互联网上搜索过,没有发现任何内容。
【问题讨论】:
-
printf("%f + %f = $f\n", 0.1, 0.3, 0.1 + 0.2);... 看起来那行有错字,最后一个数字应该是0.3... -
您在互联网上唯一能找到的就是有效的格式说明符和转义序列。在数十亿的其他任何东西中,它们都是逐字输出的。