相关疑难解决方法(0)

用C++包装整数的干净,高效的算法

/**
  * Returns a number between kLowerBound and kUpperBound
  * e.g.: Wrap(-1, 0, 4); // Returns 4
  * e.g.: Wrap(5, 0, 4); // Returns 0      
  */
int Wrap(int const kX, int const kLowerBound, int const kUpperBound)
{
    // Suggest an implementation?
}
Run Code Online (Sandbox Code Playgroud)

c++ algorithm math integer word-wrap

27
推荐指数
3
解决办法
1万
查看次数

如何环绕范围

程序中的角度以0到2pi表示.我想要一种方法来添加两个角度,如果结果高于2pi,则将它包围在2pi到0之间.或者,如果我从一个角度减去一个角度并且它低于0,它将环绕2pi.

有没有办法做到这一点?

谢谢.

c++ range

22
推荐指数
3
解决办法
2万
查看次数

一次计算正弦和余弦

我有一个使用相同参数的正弦和余弦的科学代码(我基本上需要该参数的复数指数).我想知道是否有可能比分别调用正弦和余弦函数更快.

另外我只需要0.1%的精度.那么有什么方法可以找到默认的触发功能并截断功率系列的速度?

我想到的另一件事是,有没有办法执行余数运算,结果总是积极的?在我自己使用的算法中,x=fmod(x,2*pi);但如果x为负数,我需要加2pi(较小的域意味着我可以使用较短的幂级数)

编辑:LUT原来是最好的方法,但我很高兴我了解了其他近似技术.我还建议使用明确的中点近似.这就是我最终做的事情:

const int N = 10000;//about 3e-4 error for 1000//3e-5 for 10 000//3e-6 for 100 000
double *cs = new double[N];
double *sn = new double[N];
for(int i  =0;i<N;i++){
    double A= (i+0.5)*2*pi/N;
    cs[i]=cos(A);
    sn[i]=sin(A);
}
Run Code Online (Sandbox Code Playgroud)

以下部分近似(中点)sincos(2*pi*(wc2 + t [j]*(cotp*t [j] -wc)))

double A=(wc2+t[j]*(cotp*t[j]-wc));
int B =(int)N*(A-floor(A));
re += cs[B]*f[j];
im += sn[B]*f[j];
Run Code Online (Sandbox Code Playgroud)

另一种方法可能是使用切比雪夫分解.您可以使用orthogonality属性来查找系数.针对指数进行了优化,它看起来像这样:

double fastsin(double x){
    x=x-floor(x/2/pi)*2*pi-pi;//this line can be improved, both inside this 
                              //function and before you input it into the function

    double x2 …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm trigonometry

9
推荐指数
1
解决办法
2116
查看次数

如何定义具有-PI到PI的有效范围的数字?

我想知道是否可以定义一个自定义数据类型,它只能在-3.1415926535897932和3.1415926535897931之间取值.

我们的想法是低于或高于该范围的值将自动"环绕",从而无需编写代码来进行转换,也消除了某处出错的可能性.

c++

7
推荐指数
1
解决办法
316
查看次数

如何用mod在-pi和pi之间包裹弧度?

我想在 -pi/pi 之间包裹弧度。

这是我所做的实际代码,它有效:

radians > gPIf ? radians - g2PIf : radians < -gPIf ? radians + g2PIf : radians;
Run Code Online (Sandbox Code Playgroud)

但我不太喜欢它。尝试使用 mod,但似乎我对负值有问题:

std::fmod(radians + gPIf, g2PIf) - gPIf
Run Code Online (Sandbox Code Playgroud)

是否有任何“mod”也适用于负数?

即 -20 mod 360 与操作系统计算器返回 340 :)

c++ mod

5
推荐指数
0
解决办法
61
查看次数

标签 统计

c++ ×5

algorithm ×2

integer ×1

math ×1

mod ×1

range ×1

trigonometry ×1

word-wrap ×1