我正在检查一段代码。一切都是正确的,但我无法理解概念。
double a = 0.001;
double b = 0.001;
double c = a * b;
printf ("%lf", c);
在 Visual C++ 中调试时,当我将鼠标指向第 3 行后的 c 时,它显示 9.999999999999995e-007,但在打印时它显示正确的结果,即 0.000001。我想知道它在调试工具提示中实际显示什么值以及它如何表示和转换。
最佳答案
这是 printf 执行舍入的结果。
printf 格式 %lf 舍入为默认精度。从我的头脑来看,我认为默认值是 6,这就是为什么你得到 0.000001。
调试器显示 double 的实际内容。由于浮点运算的性质,0.001 * 0.001 的结果实际上不是 0.000001,而是一个近似值,尽管差异很小。
通过使用其他格式,您可以看到不同之处。例如。试试 printf("%.15e", c);
关于c++ - 打印和调试时 Visual C++ 值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856622/