mql4 - MQL4 StringToDouble 改变变量的值?
问题描述
MQL4 文档指出双精度类型变量的值限制为:
"Minimal Positive Value" = 2.2250738585072014e-308
"Maximum Value" = 1.7976931348623158e+308
请参阅https://docs.mql4.com/basis/types/double
为什么StringToDouble()
改变转换的值?
我是在做一件事却期待不同的结果吗?
void OnStart() {
string s1 = "5554535251504900090807060504030201";
double d1 = StringToDouble(s1);
string s2 = DoubleToString(d1);
Print("s2<",s2,">");
printf("%099.8f",d1);
Print("s1<",s1,">");
return;<br>
}
这是我运行该代码时得到的结果:
s1<5554535251504900090807060504030201>
d1<000000000000000000000000000000000000000000000000000000005554535251504899684469244159852544.00000000>
s2<5554535251504899684469244159852544>
5554535251504900090807060504030201
相当于5.55454E+33
。
显然,这甚至远未接近1.7976931348623158e+308
极限。
我在这里想念什么?
解决方案
问:“我在这里缺少什么?”
记录在案的事实。
MQL4 使用不超过4
-bytes 来存储int
.
MQL4 使用不超过8
-bytes 来存储double
.
IEEE-754 标准定义了其余部分 - 这 64 位中保留了多少位:
指数( -308, 0, +308 )
符号( +, - )
和
其余部分,用于尾数的标准化形式:0.???????...????
论点,一个实际数字远离任何一个“边缘”< DBL_MIN, DBL_MAX >
并不能解释精确数字降低精度表示(参见DBL_EPSILON ~ 2E-16
或DBL_DIG ~ 15
-significant digits, or -bits DBL_MANT_DIG ~ 53
, left from a 64-bit ( 8-字节)存储单元尾数)。
使用 IEEE-754 浮点数表示,有许多数字根本无法准确存储。
大量文献对此进行了解释,因此,如果您的用例需要,请随意深入挖掘,或者可以使用其他依赖于无限(无限)精度数字表示的工具。
推荐阅读
- intellij-idea - 如何在 Intellij Idea 的项目选项卡中添加“选择打开的文件”图标?
- math - 找到小于 n 的偶数个数?
- prolog - 如何在 prolog 中修复 Einstein Zebra 中的错误 >
- php - 无法获得 Echo 的字幕,只有标题
- android - 如何在适配器内膨胀回收视图?
- hyperledger-fabric - Hyperledger Fabric - 块检查错误
- php - PHP 标头位置重定向不起作用。如何纠正
- git - VSCode 中的 git 日志扩展抛出错误模棱两可的参数 'HEAD'
- scala - 函数式编程中多元素数据结构的名称?
- python - 为什么 UnboundLocalError 显示分配前引用的变量?