相关疑难解决方法(0)

单精度浮点精度降低精度差

我正在尝试将范围缩减作为实现正弦函数的第一步.

我遵循KC NG的论文"减少巨大论据"中描述的方法

当使用0到20000的输入范围时,我得到的误差大到0.002339146.我的错误显然不应该那么大,我不知道如何减少它.我注意到误差幅度与输入θ幅度与余弦/正弦相关.

我能够获得本文提到的nearpi.c代码,但我不确定如何将代码用于单精度浮点.如果有人有兴趣,可以在以下链接找到nearpi.c文件:nearpi.c

这是我的MATLAB代码:

x = 0:0.1:20000;

% Perform range reduction
% Store constant 2/pi
twooverpi = single(2/pi);

% Compute y
y = (x.*twooverpi);

% Compute k (round to nearest integer
k = round(y);

% Solve for f
f = single(y-k);

% Solve for r
r = single(f*single(pi/2));

% Find last two bits of k
n = bitand(fi(k,1,32,0),fi(3,1,32,0));
n = single(n);

% Preallocate for speed
z(length(x)) = 0;
for i = 1:length(x)

    switch(n(i)) …
Run Code Online (Sandbox Code Playgroud)

c c++ algorithm floating-point matlab

16
推荐指数
1
解决办法
2286
查看次数

用MATLAB找到三角函数的Minimax多项式逼近

我试图在MATLAB中使用remez交换算法找到正弦和余弦的minimax多项式近似.因为我正在实现IEEE-754浮点的正弦和余弦函数,所以需要精度到23位.

在这里使用此链接(参见第8页到第15页),给出了使用Mathematica和Maple查找多项式的指令,但是,我不确定如何为MATLAB推断这些方法.

根据表3,我需要使用5阶或6阶多项式来获得~23位(小数点后)的精度.

我计划首先将所有输入θ的范围缩小到-pi/4到+ pi/4之间,然后根据需要执行正弦或余弦函数(最终目标是实现exp(i*x)= cos( x)+ i*sin(x).

我也许可以自己遵循本文的说明,但我不知道如何在这里使用remez函数.另外,我不遵循为什么作者使用等式(6)(第9页),也不理解k的等式(第11页)是如何确定的(2796201来自哪里?)为什么定义我们希望最终改变为sin9x的多项式的形式= x + kx ^ 3 + x ^ 5*P(x ^ 2).

是否更好地使用firpm函数(因为remez已被弃用)?

谢谢,非常感谢所有帮助和指导,以及编辑,以确保我的问题可能得到最好的答案.

math floating-point matlab trigonometry

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

标签 统计

floating-point ×2

matlab ×2

algorithm ×1

c ×1

c++ ×1

math ×1

trigonometry ×1