-1.58839967e+038 在 Visual Studio C++调试器中的含义
Meaning of -1.58839967e+038 in Visual Studio C++ debugger
我知道科学记数法,但我不确定这个数字(-1.58839967e+038
(到底是什么意思。
它应该非常接近 0,但它说e+038
所以它看起来像-1.5 * 10 ^ 38
(因为有一个+
(
有人可以帮我解决这个问题吗?谢谢。
是的,-1.58839967e+038
大约是 -1.588×1038,一个大数量级的负数。它恰好是类型 float
中通常可表示的最大值的 47% 左右,但这可能无关紧要。
用英语表示,大约是-158.8十分之一,除非你正在做大规模的天体物理学,否则这不是一个特别有意义的数字。
如果它存储在类型为float
的对象中,假设典型的IEEE 32位表示,那么它的表示恰好等同于0xfeeefeee
,这看起来很可疑。
下面是一个演示这一点的程序:
#include <stdio.h>
int main(void) {
union {
float f;
unsigned int u;
} u;
if (sizeof (float) != sizeof (unsigned int)) {
puts("WARNING: float and unsigned int differ in size");
}
u.f = -1.58839967e+038;
printf("0x%xn", u.u);
}
输出为:
0xfeeefeee
谷歌搜索"FEEEFEEE"发现了一篇关于"幻数"的维基百科文章,其中包括以下内容:
费菲
"费用费用",由Microsoft的调试 HeapFree(( 用于标记释放的堆内存。附近的一些内部簿记值也可能将高词设置为 FEEE。
脚注指向 http://www.nobugs.org/developer/win32/debug_crt_heap.html
当转换为十六进制(使用此站点(时,您可以看到此值实际上是0xFEEEFEEE。
根据这里的幻数列表:
FEEEFEEE : "fee fee",由Microsoft的调试 HeapFree(( 用于标记释放的堆内存。附近的一些内部簿记值也可能将高词设置为 FEEE。
所以它可能是一个已删除的结构,或者内存溢出或类似的东西。没有你的代码,我无法确切地说出来。
-1.58839967e+038
的值确实是一种科学记数法。我相信E
的这种使用可以追溯到FORTRAN,自从我在1970年代后期第一次遇到计算机以来,我个人就看到了这种符号的使用。
该数字几乎是可以在 IEEE-754 32 位(也称为单精度(二进制浮点值中表示的最大可能负值。我不会将其描述为接近于零。
真正最大的星等是+/- 3.4028235E+38
。
这个计算器是一个不错的网站,它显示了构成浮点值的位的详细存储和排列。从中您可以看到您命名的值作为 32 位值存储在内存中 0xfeeefeed
.这个值并不像0xdeadbeef
那么可疑,但它似乎有点过于模式化,不能只是计算的结果。
- 正在VS调试器中监视映射条目
- 为什么我的 VS 代码调试器在我的C++代码周围弹跳?
- 带有 GDB 调试器的 VS 代码内存视图
- 为什么调试器引发"read access violation. this was nullptr"异常?
- VS2017调试器:没有地址,可能是由于编译器优化
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 使用 Windows 10 和 MINGW 编译器在 VS Code 上使用 gdb 调试器进行调试时出错
- 如何在可视化代码中生成用于 c++ 开发的调试器?
- 为什么我的程序无法在GDB在线编译器/调试器或Visual Studio C++ 2019中运行
- Popen使Qt调试器崩溃
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 在集成终端上运行vscode lldb调试器时,如何获取程序的输出?
- 宏使枚举调试器感知?
- Eclipse-C++-调试器立即终止
- 标识gdb调试器中符号的源文件名
- Visual Studio图形调试器引发读取访问冲突异常
- 如何修复使用VScode调试器gcc调试时的"找不到文件"错误
- 如果您在C++上有 Makefile 项目,如何在 VScode 中"fix"调试器?
- 为什么调试器总是跳过此程序中的一行?
- c++ 上的嵌入式 python.更改调试器时出错