汇编代码中的数字非常大,但在 C++ 中无效
extremely huge number in assembly code but invalid in C++
在一段反汇编代码中(大概是visual studio编译的),我发现了这样一段代码:
label:
dt 1.189713341495303E+4932
这是什么意思?为什么有人要使用这样的号码?
boost::lexical_cast<double>("1.189713341495303E+4932")
无法转换此数字。如果超出范围,为什么在汇编中允许?
在大多数系统上,此值接近 float.h
中的 LDBL_MAX
- 它是 long double
:
的最大值
$ grep LDBL_MAX float.h
#define LDBL_MAX __LDBL_MAX__
$ gcc -dM -E - < /dev/null | grep __LDBL_MAX__
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
在一段反汇编代码中(大概是visual studio编译的),我发现了这样一段代码:
label:
dt 1.189713341495303E+4932
这是什么意思?为什么有人要使用这样的号码?
boost::lexical_cast<double>("1.189713341495303E+4932")
无法转换此数字。如果超出范围,为什么在汇编中允许?
在大多数系统上,此值接近 float.h
中的 LDBL_MAX
- 它是 long double
:
$ grep LDBL_MAX float.h
#define LDBL_MAX __LDBL_MAX__
$ gcc -dM -E - < /dev/null | grep __LDBL_MAX__
#define __LDBL_MAX__ 1.18973149535723176502e+4932L