c++ - 打印和调试时 Visual C++ 值不同?

标签 c++ c visual-c++ visual-studio-debugging

我正在检查一段代码。一切都是正确的,但我无法理解概念。

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/

相关文章:

c - x86-64 程序集 "cmovge"到 C 代码

c++ - Qt C++ 中 anchor 的等价物是什么?

c - 读取文本文件,将每个字符小写并将其存储在数组中

在 C 中创建自己的头文件

c++ - 在单独的行上编写函数体会产生负面结果吗?

string - C++ 中最常用的字符串类型是什么以及如何在它们之间进行转换?

C++。错误 LNK1104。第一次打不开库文件 解决办法建了

c++ - 将 emoji unicode 从 cpp 核心级别传递到 ios ui 级别

c++ - 如何在工厂中为延迟实例化指定具体类/如何延迟构造函数调用

c++ - 同一命名空间问题中相互依赖的类