オーバーフローした値を飽和させずにラップさせる

4 次查看(过去 30 天)
Kiyoto Matsumoto
Kiyoto Matsumoto 2020-11-5
お世話になります。
数値を加算した結果がオーバーフローした場合、
MATLABでは最近値に飽和するかと存じます。
これを飽和ではなくラップさせる方法はありますでしょうか。
現在は以下の様に対処しているのですが、下記例ですとuint32の範囲を超えた場合には
機能しないため、多数のデータの処理には使用できません。
%uint8のデータを加算する場合
a = uint8(100);
b = uint8(200);
c = a + b %255で飽和してしまう。ラップして44にしたい。
%現在の対策
x = uint32(a);%あらかじめuint32にして加算
y = uint32(b);
z = x+y; %300
z_arr = typecast(z, 'uint8'); %[44 1 0 0]
z_arr(1) %44
以上よろしくお願いいたします。

采纳的回答

Atsushi Ohashi
Atsushi Ohashi 2020-11-6
Fixed-Point Designer Toolbox をお持ちであればオーバーフローの設定をカスタマイズすることができます。
F = fimath('RoundingMethod','Floor','OverflowAction','Wrap');
T = numerictype('uint8');
a = fi(200, T, F)
b = fi(100, T, F);
fi(a + b, T, F)
ans =
44
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 0
RoundingMethod: Floor
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
fimath のヘルプページ
globalfimathのヘルプページ
ご参考になれば幸いです。
  1 个评论
Kiyoto Matsumoto
Kiyoto Matsumoto 2020-11-6
ご回答ありがとうございました。
購入を検討します。

请先登录,再进行评论。

更多回答(0 个)

标签

产品


版本

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!