Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
libfixmath';s atan2似乎产生了无效的结果-有任何想法、建议或替代方案吗? 我想在C++中做定点运算,所以我找了一个合适的库。这里已经建议过好几次了,但是我对它提供的atan2函数有困难。我的测试代码计算角度的正弦和余弦,然后使用atan2重新计算该角度: #include <cmath> #include <fstream> #include <iostream> #include <fix16.h> #include <fix16.hpp> int main() { unsigned int n = 1000; std::ofstream atan2File("atan2.dat"); for(unsigned int i = 0; i <= n; i++) { double d = M_PI/2.*i/n; double s = sin(d); double c = cos(d); double a = atan2(s,c); Fix16 df(d); Fix16 sf(df.sin()); Fix16 cf(df.cos()); Fix16 af(sf.atan2(cf)); atan2File << d << " " << a << " " << (double)af << std::endl; } return 0; }_C++_Trigonometry_Fixed Point - Fatal编程技术网

libfixmath';s atan2似乎产生了无效的结果-有任何想法、建议或替代方案吗? 我想在C++中做定点运算,所以我找了一个合适的库。这里已经建议过好几次了,但是我对它提供的atan2函数有困难。我的测试代码计算角度的正弦和余弦,然后使用atan2重新计算该角度: #include <cmath> #include <fstream> #include <iostream> #include <fix16.h> #include <fix16.hpp> int main() { unsigned int n = 1000; std::ofstream atan2File("atan2.dat"); for(unsigned int i = 0; i <= n; i++) { double d = M_PI/2.*i/n; double s = sin(d); double c = cos(d); double a = atan2(s,c); Fix16 df(d); Fix16 sf(df.sin()); Fix16 cf(df.cos()); Fix16 af(sf.atan2(cf)); atan2File << d << " " << a << " " << (double)af << std::endl; } return 0; }

libfixmath';s atan2似乎产生了无效的结果-有任何想法、建议或替代方案吗? 我想在C++中做定点运算,所以我找了一个合适的库。这里已经建议过好几次了,但是我对它提供的atan2函数有困难。我的测试代码计算角度的正弦和余弦,然后使用atan2重新计算该角度: #include <cmath> #include <fstream> #include <iostream> #include <fix16.h> #include <fix16.hpp> int main() { unsigned int n = 1000; std::ofstream atan2File("atan2.dat"); for(unsigned int i = 0; i <= n; i++) { double d = M_PI/2.*i/n; double s = sin(d); double c = cos(d); double a = atan2(s,c); Fix16 df(d); Fix16 sf(df.sin()); Fix16 cf(df.cos()); Fix16 af(sf.atan2(cf)); atan2File << d << " " << a << " " << (double)af << std::endl; } return 0; },c++,trigonometry,fixed-point,C++,Trigonometry,Fixed Point,一些接近零和pi/2的值是合理的,但很多值不是。该代码似乎用于计算atan2的atan2,但我无法以上面所示的方式指出它可能失败的地方 有人知道libfixmath的libfixmath代码中可能存在错误吗 是否有其他库为定点值提供三角函数?我需要正弦,余弦,正切和它们的逆 当然,我可以尝试将缺少的函数添加到其他建议的定点库中,但我没有为定点类型编写代码的经验 gcc-v:gcc版本4.7.2 20130108[gcc-4_7-branch版本195012](SUSE Linux) 我需要定

一些接近零和pi/2的值是合理的,但很多值不是。该代码似乎用于计算atan2的
atan2
,但我无法以上面所示的方式指出它可能失败的地方

  • 有人知道libfixmath的
    libfixmath
    代码中可能存在错误吗
  • 是否有其他库为定点值提供三角函数?我需要正弦,余弦,正切和它们的逆
当然,我可以尝试将缺少的函数添加到其他建议的定点库中,但我没有为定点类型编写代码的经验

gcc-v:
gcc版本4.7.2 20130108[gcc-4_7-branch版本195012](SUSE Linux)


我需要定点,因为我想在Cortex-M4(无FPU)上进行这些计算。实际上,我的Cortex-M4代码中已经有了
libfixmath
,但它显示了类似上面描述的错误。OTOH,它的速度大约是
float
版本的10倍。我想在这个速度上增加或多或少的正确结果。

gcc-4.4.3或gcc的stdlib的clang-3.5对我来说是不可复制的。只是澄清一下不可复制:我看到libfixmath的
atan2
作为一个函数
phi
,在最低
phi
的情况下,它比stdlib版本高出约20%。这个偏差在
phi=0.4
.hm.以上下降到1%以下……稍后我将尝试使用Cortex-M4代码生成一个文件,并查看它的实际外观。这20%是如何定义的?相对于stdlib版本,
(固定stdlib)/stdlib
。请注意,20%是一个小的绝对数。因此,根据上面计算的
((双)af-a)/a
?对我来说,你不能复制这种行为有点可怕。是否有编译器标志导致了这种情况?
plot "atan2.dat" u 1:2 w l title 'double', "atan2.dat" u 1:3 w l title 'Fix16'