我试图在浮点中实现余弦和正弦函数(但我没有浮点硬件).
由于我的处理器没有浮点硬件,也没有指令,我已经实现了浮点乘法,除法,加法,减法和平方根的算法.所以这些是我可以用来实现余弦和正弦的工具.
我正在考虑在这个站点使用CORDIC方法 但是,我使用newton的方法实现了除法和平方根,所以我希望使用最有效的方法.
请不要告诉我只是去看一本书或"纸张存在",不要开玩笑.我正在寻找众所周知的快速有效算法的名称.
我在Verilog中设计了一个32位单精度浮点乘法器和一个单独的加/减单元.
我在MATLAB中编写了一个脚本,它生成了一堆随机浮点数,并在Verilog中生成了一个测试平台.
我比较从ncverilog模拟那些从MATLAB的结果,并证实了我的倍增器工作正常,我的加/减正常工作为好.
但是,我想知道一个测试用例的列表,它会对我的浮点单元进行压力测试.有这样的清单吗?我知道像Softfloat一些节目,但测试的计算机的浮点运算,而不是能够合并与一个Verilog的测试平台.
我还应该提到我的单元不支持溢出,下溢等异常,并且不支持非规范化值.舍入模式是舍入到最近的.
谢谢!
我一直试图在Matlab中绘制箭头,但它们看起来都很糟糕.另外,我希望我的箭头是一个实心三角形,而不是V.
我尝试使用Matlab文件交换中提供的软件包:箭头,箭头,箭头3,可能至少还有一个.
我甚至尝试在Matlab图形编辑器中手动创建一个箭头,但是当我调整线宽时,箭头看起来像这样:

我使用注释命令创建上面的箭头:
annotation(gcf,'arrow',[0.621875 0.457916666666667],...
[0.205421152030217 0.40755429650614],...
'HeadLength',4,'LineWidth',5);
Run Code Online (Sandbox Code Playgroud)
这是尝试使用此处可用箭头包的结果:Arrow.m(注意底部箭头不垂直于线:

我甚至试过以下,这是下面的结果(注意可怕的箭头):
figure
plot(1:10, 1:10)
annotation(gcf,'arrow',[0.621875 0.457916666666667],...
[0.205421152030217 0.40755429650614],...
'HeadLength',4,'LineWidth',5);
Run Code Online (Sandbox Code Playgroud)

如何将浮点数舍入到最接近的整数?我正在寻找二进制的算法,因为我必须在汇编中实现代码.
我在MATLAB中创建了一些数字,我运行了一个命令,在创建数字后将它们转换为.eps.
但是,我希望数字在保存到.eps之前最大化.我正在寻找一个命令告诉MATLAB将数字调整为屏幕大小.然后我想运行我的功能,保存到.eps.
有这样的方式吗?
我听说有可能指定图的像素宽度.我忘记了那个命令,所以如果你知道它,那将会有所帮助.
maximize_figure()如果可能的话,我真正想要的是某种功能.
如果只使用单精度加/减和乘法硬件(无FMA),是否可以执行除法并获得IEEE-754单精度正确值?
具体而言,如果在单精度硬件上执行用于执行浮点除法的Newton-Raphson方法,是否可以实现IEEE-754正确的结果?
我在 matlab 中有一个名为mystruct的结构
它具有以下字段和以下类:
Field Class
a single
b single
c double
Run Code Online (Sandbox Code Playgroud)
我想将mystruct 的所有字段转换为 class double,但是当我尝试时:
double(mystruct)
Run Code Online (Sandbox Code Playgroud)
我从 MATLAB 得到以下输出:
??? Error using ==> double
Conversion to double from struct is not possible.
Run Code Online (Sandbox Code Playgroud)
此外,我仅以 mystruct为例。我意识到我可以手动单独投射每个字段,因为在这个例子中只有 3 个字段。我想知道如何将此转换为具有许多字段和子字段的 matlab 中的任何结构的两倍。
我试图在MATLAB中以单精度生成一个均匀分布的浮点值数组.
我想生成+/-(2-2 ^ -23)*2 ^ 127范围内的所有数字,它表示基于IEEE-754标准的可能32位浮点数的范围.问题是只生成大量数字,我想要包括小幅度数字(接近和包括0).如果我们取所有生成的数字的绝对值然后找到最小的(我已经复制了代码下面的输出),就会看到这种情况.
到目前为止,我在MATLAB中有这个代码:
numtogenerate = 20000;
% Preallocate for speed
generatednumber(numtogenerate) = 0;
for i = 1:numtogenerate
generatednumber(i) = rand*(2-2^-23)*2^127*2 - 2^127*(2-2^-23);
end
minimum = min(generatednumber)
smallest = min(abs(generatednumber))
maximum = max(generatednumber)
hist(generatednumber)
Run Code Online (Sandbox Code Playgroud)
这是输出:
minimum =
-3.4026e+038
smallest =
8.4046e+033
maximum =
3.4027e+038
Run Code Online (Sandbox Code Playgroud) 我有一个Newton-Raphson平方根算法,我使用它计算输入值的单精度平方根.然而,使用我输入的测试平台,我发现某些输入值不会收敛到最接近实际平方根的答案.当我说实际平方根时,我的意思是你得到的结果比32位IEEE-754更精确.结果,我想知道在执行IEEE-754中的平方根时所获得的正确值是什么.这个论坛上的一些人告诉我,最接近的值不一定是最正确的,这就是我要问的原因.
当计算单精度IEEE-754 32位值0x3f7fffff的平方根时,什么被认为是正确的结果?为什么?
此外,在计算0x7F7FFFFF的平方根时,什么被认为是正确的结果?
我试图在不同大小的MATLAB中减去两个数组,我目前正在使用for循环,这需要很长的时间.有没有办法让下面的代码更快?我想知道是否可以以某种方式在没有for循环的情况下快速创建一个117x489x489的数组.
第一个数组a的尺寸为1x117,第二个数组b的尺寸为489x489.结果矩阵的尺寸为117x489x489.
这是我如何减去两个数组:
for i = 1:length(a)
result(i) = a(i) - b;
end
Run Code Online (Sandbox Code Playgroud)