停止位增长用于功率计算

2次浏览(过去30天)
生活是美好的
生活是美好的 2021年9月30日
评论道: 生活是美好的2021年10月14日
我需要一个逻辑来检查位增长的情况下字长为32 /16/8位
我使用以下代码来检查位增长,并限制最大和最小32位值,但这似乎不工作 案例2 !!
% Case -1
C =幂(- 9,28)
C = 4.2620e+55
如果(c >= (2^32-1))
C = min(C,2^31);
结束
如果(c >= -2^31)
C = -2^31;% min (C、2 ^ 31)
结束
C
C = -2.1475e+09
% Case -2
C =幂(- 9,29)
C = -4.1341e+57
如果(c >= (2^32-1))
C = min(C,2^31)
结束
如果(c >= -2^31)
C = -2^31;% min (C、2 ^ 31)
结束
C
C = -4.1341e+57
我需要逻辑的正负尾数和指数值。结果C不能超过32位字长
谢谢你! !

答案(2)

约翰D 'Errico
约翰D 'Errico 2021年9月30日
编辑:约翰D 'Errico 2021年9月30日
情况1:你不能将一个双精度数提高到超过flintmax(2^53 - 1)的幂,并期望结果是正确的。
flintmax
Ans = 9.0072e+15
这意味着当你执行这个:
权力(-97年28)
Ans = 4.2620e+55
如果您希望结果具有正确的数字,那么您应该期待纯粹的垃圾。
信谊(-97)^ 28%正确
ans =
42619520516862344959898006540158454742326868747150111361
权力(-97年28)%大部分是垃圾
Ans = 4.2620e+55
sprintf (' % 55 f '、电力(-97年28))%注意低位数的差异
ans =“42619520516862345006904392299734156132045387227709046784.000000”
情况2:虽然你可能认为-2^31使数字-2的幂为负,但事实上,它形成了2^31,然后使结果为负。如果幂是奇数,那么这没有关系,因为负号起作用。但如果幂是偶数,那就有关系了。
一个数的幂次运算比一元减号运算的优先级高。所以这两个操作是不一样的:
2 ^ 30
Ans = -1.0737e+09
(2) ^ 30
Ans = 1.0737e+09
我用了偶次来证明它们是不同的。

史蒂文的主
史蒂文的主 2021年9月30日
如果你想要饱和,你可以用整数运算。
B = int32(-97)
b =int32-97年
C =幂(b, 28)
C =int322147483647
你也可以用 intmin 而且 intmax 作为你的极限。这些函数可以返回8种整数类型(有符号和无符号8、16、32和64位整数)中的任何一种的极限。
Q = 2^33
Q = 8.5899e+09
Q > intmax(“int32”%真实
ans =逻辑
1
Q > intmax(“int64”%假
ans =逻辑
0
但John D'Errico提出的观点也是你在进行计算时应该考虑的事情。
4评论

登录评论。

标签

下载188bet金宝搏


释放

R2021a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!