文章 "在 MQL4 中处理双精度浮点数"

 

新文章 在 MQL4 中处理双精度浮点数已发布:

在本文中我们将研究典型的编程错误,这种错误在处理 MQL4 程序中的双精度数值时会出现。

由于是双精度浮点格式,其储存的准确度受到限制。

例如,如果我们假设精确度不受限制,从理论上讲,对于任何的双精度浮点数 A 和 B,以下的表达式始终成立:

(A/B)*(B)=A,

A-(A/B)*B=0,

(A/B)*(B/A)=1 等

小数位在计算机内储存的准确度取决于小数部分大小,并限制在 52 位。 为了说明该情况,我们来看看以下的例子:

在第一个循环(i)中,我们计算 23 的阶乘(从 2 到 23 的整数的乘积),结果为: 23!=25852016738884976640000. 结果储存在双精度类型的变量 a 中。

在下一个循环(j)中,我们将得到的结果 a 除以从 23 到 2 的所有整数。 最后我们期待的结果是 a=1。

#include <stdlib.mqh>
int start()
  {
   int maxfact=23;
   double a=1;
   for (int i=2; i<=maxfact; i++) { a=a*i; }
   for (int j=maxfact; j>=2; j--) { a=a/j; }
   Alert(" a=",DoubleToStrMorePrecision(a,16));
   return(0);
  }

作者:MetaQuotes Software Corp.

原因: