对MT5的祝愿 - 页 46

 
-Alexey-:
我不同意,有一个问题,这里有一个例子(网格10000x10000)。

double x1=0.0011。

double y1=x1/10000。

double x2=0.0012。
双重y2=x2/10000。

双重c=y1-y2。
double d=MathPow(c,2);


printf(string(d))。

результат: 9.999999999999968e-017

我应该如何处理这个结果?我如何与其他结果进行比较?DBL_EPSILON=2.2204460492503131e-016.除了最后两个数字--看到了吗?而这仅仅是两项操作。而且我有更多这样的操作。而根据这些信息,你将不得不在以后使用一些更多的操作来恢复数据。更多的损失。我只是在学习用类似C语言编程,这样的课对我来说很难建立(或者说,我不知道如何建立)。这是一项严肃的工作。顺便问一下,你有没有这样的课?而开发者可以一次性为每个人改善事情。这将有可能使100,000x100,000个网格。已经有了或多或少具有代表性的样本,尽管即使这样也大体上是不够的。如果他们为任意精度做一个类,那就更好了 :)它只是一个数据类型。如果它存在,它的存在是有原因的,因为它满足了一种需要。关键是,我不知道这对开发者来说是否困难。如果这很困难,很昂贵--我同意你的看法--为什么要把我的问题转嫁给他们。但是,如果这并不困难--为什么不做呢。同样--一个强大的开发环境,用于高精度的交易计算--这里有些竞争优势:)。这就是为什么我问他们怎么看。

请重读数字的标准形式,许多问题会消失。

在标准形式下,1.111e5比9.999e4大,所以这个比较是非常正确的。

下面是同样的结果:9.999999999999968e-017与数字的二进制表示法有关,不是每个二进制形式的数字都用有限分数表示,有些是用无限分数表示,因此要把尾数四舍五入到最接近的有限分数的数字。

顺便说一下,double d=MathPow(c,2);采取度数是不正确的,如果你用double工作,那么double d=MathPow(c,2.0);所以,我不知道是否有错误,但当把一个数字设定为度数时,你也应该注意指标的类型。

 
-Alexey-:
幻想与此完全没有关系。我的问题是关于实施最常见的分析方法 的可能性。而这是在去除趋势和周期后剩余的系列中工作。在所有大学的金融统计学教科书和方法书中都无一例外地写到了这种方法。这不是一个幻想,而是分析的经典 方法之一。而专门的环境应该有实施这种方法的手段,你不觉得吗?
)))))))
 
Urain:

请重读数字的标准形式,许多问题会消失。

在标准形式下,1.111e5比9.999e4大,所以这个比较是非常正确的。

下面是同样的结果:9.999999999999968e-017与数字的二进制表示法有关,不是每个二进制形式的数字都用有限分数表示,有些是用无限分数表示,因此将尾数四舍五入到与有限分数最近的数字。

关于1.111e5和9.999e4我看到了。但我需要对这些进行比较。9.9999999999999999968e-017(关于数字的精度损失我另外写了)。帮助告诉我,差异小于DBL_EPSILON 的数字应该被认为是没有区别 的。对不起,如果我没有说清楚--我现在才刚刚学会:)分别感谢关于该指标的信息。

 
Urain:

顺便说一下,double d=MathPow(c,2);采取度数是不正确的,如果你用double工作,那么double d=MathPow(c,2.0);所以,我不知道错误与否,但当把一个数字设置为度数时,必须遵循指标的类型。

指数在任何情况下都必须是双倍的类型
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
 

亲爱的开发者,请允许void类型 返回值,或者定义一个新的类来返回任何类型的值。

类似这样的事情。

voids get(int i)
  {
   if(i==0)return((int)2);
   else
     {
      if(i==1)return((double)2);
      else
        {
         if(i==2)return((string)2);
        }
     }
  }

我想在用户定义的函数中拥有这样的声明。

int  Custom_ArraySize( void  array[] );   
bool Custom_ArraySort( number&  array[] );

为此,我需要在语言中添加一些东西。你已经为用户提供了过度的安全保障,你需要在某个地方放松一下。

想象一下,一个开发者正在写代码,他已经创建了1500行,整个代码都是用double操作的,如果要把int传给它,他必须再做1500行的overload。而你有14种类型。

 
Urain:

想象一下,一个人写代码,做了1500行,整个代码都是用double工作的,要传入它,你需要再做1500行的重载。而你有14种类型。

使用OOP。

 
lea:

使用OOP。

你认为我是用自动代码写的吗?

给开发者。

作为一个变体,以缓解写作兄弟会的困境,进行数组类型转换,这样你至少可以进行这样的调用。

void OnStart()
  {
   int array[10];
   func((double)array)
  }
//+------------------------------------------------------------------+
void func(double &array[]){};
 
Urain:

你认为我是用自动代码写的吗?

从你需要这样的语言扩展这一事实来看,我想是的。

p.s. 如果你在解决你的问题时只有C++编译器,我们会听到修改语言标准的建议吗?

 
lea:

基于你需要这样的语言扩展的事实--显然,是的。

p.s. 如果你在出现问题时只有C++编译器--我们会听到修改语言标准的建议吗?

不要混淆翻译器和编译器。mql不是真正的编译器,它是一个描述安全的C++函数调用的 翻译器。

而mql5正处于积极开发阶段。所以我的修改要求是很充分的。

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
Urain:

不要混淆翻译器和编译器,mql不是真正的编译器,它是一个描述安全的C++函数调用的 翻译器

此外,mql5正处于积极的发展阶段。所以我提出的修改要求是很充分的。

好吧,如果它如此重要,让我们采取Java而不是C++。同时翻译成字节码 :)请重新考虑一下语言标准?

要求增加一个通用类型是不太合适的。 你应该要求提供模板。但对于通用类型来说,OOP已经足够了。

原因: