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

15 views (last 30 days)
Kiyoto Matsumoto
Kiyoto Matsumoto on 5 Nov 2020
お世話になります。
数値を加算した結果がオーバーフローした場合、
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
以上よろしくお願いいたします。

Accepted Answer

Atsushi Ohashi
Atsushi Ohashi on 6 Nov 2020
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 Comment
Kiyoto Matsumoto
Kiyoto Matsumoto on 6 Nov 2020
ご回答ありがとうございました。
購入を検討します。

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!