两个定点相加

5次浏览(最近30天)
scc28x
scc28x 2021年4月8日
编辑: scc28x2021年4月16日
嗨,这可能是一个使用固定点设计器的新手问题。我要把两个不动点数相加,其中一个部分是从另一个不动点数中提取出来的。稍后我不需要做任何硬件代码生成,所以我只关心数学是否正确。请见下文:
一个= fi (1 0 3 0);
b = fi (1 0 3 0);
= a.bin (1:2) + b;
A.bin (1:2)+b导致错误。我想这是因为a.b in1(1:2)不是一个定点物体。
我知道这样做的方法是定义一个新的fi对象与适当的字长度,然后做求和:
c = fi (0 0 2 0);
c.bin = a.bin (1:2);
= c + b
有没有别的方法来做这个,这样我就不需要定义一个中间的fi对象,c?
非常感谢。

答案(1)

安迪·巴特利特
安迪·巴特利特 2021年4月9日
方法返回一个字符串
fi对象的bin方法
一个= fi (1 0 3 0);
w = a.bin (1:2)
类(w)
返回一个字符串
w =
“00”
ans =
“字符”
并且不能添加到另一个fi对象。
Fi既是构造函数也是强制类型转换操作符
当调用fi时,它既是一个构造函数,又是一个运行时强制转换操作。
在不创建中间变量的情况下,将b加到a的两个最重要的位上的目标可以使用fi作为强制类型转换来实现。
王= 3;
iMax = 2^wl - 1;
《不扩散核武器条约》= 8;
vA = randi([0 iMax],1,nPts);
vB = randi([0 iMax],1,nPts);
a = fi (vA, 0 3 0);
b = fi (vB, 0 3 0);
人物= fi (a, 0、2、1,“RoundMode”“地板”) + b
检查数学以证明这是正确的。
%奢侈加倍数学答案和定点答案应该
% off为0或1,这取决于是否从a中删除了位
outDbl = double(a) + double(b);
err = double(outFi) - outDbl;
fi_dbl_err = [
双(人物)
outDbl
犯错)
使用这个随机数生成器种子运行这个脚本
rng (12345);
产生以下输出
人物=
11 7 5 7 4 4 8 9
numerictype (0 4 0)
RoundingMethod:地板
OverflowAction:饱和
ProductMode: FullPrecision
SumMode: FullPrecision
fi_dbl_err =
11 7 5 7 4 4 8 9
12 7 6 8 4 4 9 10
1 0 -1 -1 0 -1 -1
1评论
scc28x
scc28x 2021年4月16日
谢谢你的回复。我还是不太明白“演员阵容”这个功能。使用上面的想法。下面是一个例子:
一个= fi (2 0 3 0);
k = fi (0, - 3, - 1) + 1;
在这种情况下,k变成了“3”,k.bin='0110'。也许我错过了什么,但这并没有达到我的目标。它只是改变了小数点的位置。k的基本值保持在2.0+1=3.0。
我想看到的是:
a.b inbin ='0010'被左移1位,所以我们得到'0100'。
现在当给a加1时,我们得到0101。换句话说,潜在价值实际上发生了变化。
我在考虑使用bitsliceget来完成这个任务。这是最好的方法吗?
再次感谢。

登录评论。

s manbetx 845


释放

R2020b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!