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

11 vues (au cours des 30 derniers jours)
Kiyoto Matsumoto
Kiyoto Matsumoto le 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
以上よろしくお願いいたします。

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (0)

Tags

Produits


Version

R2020a

Community Treasure Hunt

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

Start Hunting!