-1.58839967e+038 在 Visual Studio C++调试器中的含义

Meaning of -1.58839967e+038 in Visual Studio C++ debugger

本文关键字:调试器 C++ 58839967e+038 Visual Studio      更新时间:2023-10-16

我知道科学记数法,但我不确定这个数字(-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那么可疑,但它似乎有点过于模式化,不能只是计算的结果。