为什么在学位方面会有这样的花招?

 

我需要写一个与权力有关的函数,在这个过程中我发现了一些有趣的事情。

如果我把一个负的小数替换成一个负的小数度,MQL5会写成-nan。

double n = MathPow(-5.5,-0.2);

我在C++中检查了一下,得到了同样的结果(我不知道用的是什么版本的语言,因为我懒得编译,我只是用cpp.sh来测试)。

#include <iostream>
#include <string>
#include <tgmath.h>

int main()
{
    double _pow = pow(-5.5,-0.2);    
  
  std::cout << _pow << "\n";
}


我认为在MQL5中,如果答案是相同的,那么就不会有错误。但问题是,为什么会发生这样的情况?如果我们做数学计算,那么答案应该是存在的。在数学上,一个负数等于1除以同一数字的正幂。换句话说。

-5.5^-0.2 = 1/(-5.5^0.2) = −0,711094733;

而电脑上的计算器证实了这一点。那么,在成绩方面有什么诀窍呢?

 
double n = -1/MathPow(5.5, 0.2);
Print(n);
 
Andrey Azatskiy:

我需要写一个与权力有关的函数,在这个过程中我发现了一些有趣的事情。

如果我把一个负的小数替换成一个负的小数度,MQL5会写成-nan。

我在C++中检查了一下,得到了同样的结果(我不知道用的是什么版本的语言,因为我懒得编译,我只是用cpp.sh测试了一下)。


褒义词给出了同样的答案,在MQL5中没有错误!但这样的答案是什么原因呢?如果我们使用数学,就应该给出答案。在数学上,一个数字的负数等于1除以同一数字的正数。 换句话说。

而电脑上的计算器证实了这一点。那么,学位是什么东西呢?

在R:

(-5.5)^-0.2=NaN

-5.5^-0.2=-(5.5^-0.2)=-0.7110947

 
Aleksey Nikolayev:

在R:

(-5.5)^-0.2=NaN

-5.5^-0.2=-(5.5^-0.2)=-0.7110947

也许这些腿是由于你不能从一个负数中提取偶数根而长出来的?我已经有些困惑了......最重要的是,如何绕过它?

 
Andrey Azatskiy:

最重要的是,如何绕过它?

m = 2

n = 10

double result = pow(pow(-5.5,2.0),-0.1); 
Print("result = ",result);                      //result = 0.7110947333604484
没有括号,减号可以有不同的解释,我认为
 
Roman:

在标志方面会有问题。偶数幂的根总是正的

 
Andrey Azatskiy:

在标志方面会有问题。偶数幂的根总是正的。

在学位为分数的计算器中

1/(-5.5 ^ -0.2)
-0,7110947333604484236326007791589

在学位是分数的mql中

double n = 1/MathPow(-5.5, -0.2);
Print(n);

zero divide in 'Pow.mq5' 

在程度为整数的mql中。

double n = 1/MathPow(-3.0, -3.0);
Print(n);

-27.0

结论是,该函数不能正确计算小数点幂,并返回零除数。

 
Igor Makanu:

m = 2

n = 10

没有括号,减号可以有不同的解释,我认为

谢谢你的回答,但一般来说,如果我们采取一种算术上正确的解决方案,似乎只有复数可以用来实现这样的解决方案...在你提出的方法中,有必要对度数进行划分,以使基础值总是有一个正的度数,答案将总是正的。但是,如果你不考虑这种拟合--我们只谈到复数,因为据我所知,根据普遍接受的代数模型(我不是数学家)--负数的根将是一个复数。

 
Roman:

在mql中,哪里是分度?

在学位是分数的mql中

在程度为整数的mql中。

结论是,该函数不能正确计算小数度,并返回零除数。

该功能是正确的。标准的数学方法在那里不起作用)

 
如果我误解了,请纠正我,也许毕竟在复数之外有一个解决方案?
 
Andrey Azatskiy:

该功能是正确的。标准数学就是不适合那里)

-0.2不为零,以返回除以零的 错误。

原因: