复杂的整数运算为什么不能做?

43岁的观点(30天)
约书亚福特
约书亚福特 2021年5月12日
编辑: 安迪·巴特利特 2021年6月7日
我一直在研究一个模型,比较固定和浮点。在一个阶段我把复杂的浮点数组和一个复杂的产品int16数组。但是不支持复杂的整数运算。金宝app这是为什么,它可以改变吗?
3评论
约书亚福特
约书亚福特 2021年5月14日
你好大卫,
谢谢你的回复。
服用该产品涉及复杂的整数是唯一我想做手术。
干杯

登录置评。

答案(3)

詹姆斯Tursa
詹姆斯Tursa 2021年5月14日
编辑:詹姆斯Tursa 2021年5月14日
我认为禁止整数数组算法在MATLAB的主要原因是因为造成的歧义马克斯(min())整数运算的行为。与其他语言(如C / c++ 通常 做模运算溢出情况,MATLAB极值剪裁。例如,把这个操作:
uint8 uint8 (200) + (200)
在C / c++这将导致国防部(200 + 200256)=国防部(400256)= 144
在C / c++可以串几个这样的操作和得到一个一致的答案,不管订单的操作。
但在MATLAB这导致马克斯(200 + 200255)= max (400255) = 255
这导致了MATLAB取决于操作的顺序。例如,这个表达式:
uint8 (200) + uint8》(200)——uint8 (200)
组在两个不同的操作方式:
(uint8 (200) + uint8 (200))——uint8 (200) = 255 - 200 = 55
uint8 (200) + (uint8》(200)——uint8 (200)) = 200 + 0 = 200
所以,这取决于你订单的操作得到两种不同的答案。这就变成了问题当操作涉及任何真正的标量因为歧义上面提到的操作顺序。根据假设为中间表达式的操作顺序使用数组时,你可以得到一个完全不同的答案。为了避免这种模棱两可,MATLAB只是不允许它。
我的 猜一猜 是,你想把这个操作浮点运算,在这种情况下,将操作数转换为浮点操作,1月前建议是路要走。你总是可以把结果返回一个整数类型手术后。

安迪·巴特利特
安迪·巴特利特 2021年6月7日
编辑:安迪·巴特利特 2021年6月7日
基MATLAB提供的整数被设计来支持图像处理用例。金宝app
整数类型也的一个特例fi对象提供的定点设计师。Fi对象被设计用来支持通用计算控制、信号处理、图像处理等金宝app复杂的操作为Fi对象支持。
下面的代码将生成一个错误由于复杂的MATLAB内置整数的局限性。
=复杂(7,5)
b =复杂(2)
c = a * b
ai = int16 (a)
bi = int16 (b)
ci = ai * bi
产生该输出
> > complex_fi_mult
一个=
7 - 5我
b =
3 + 2我
c =
31 - 1我
ai =
int16
7 - 5我
bi =
int16
3 + 2我
错误使用*
复杂的不支持整数运算。金宝app
错误在complex_fi_mult(第7行)
ci = ai * bi
如果第一个整数类型转换为fi对象的同龄人,支持复杂的数学。金宝app
=复杂(7,5)
b =复杂(2)
c = a * b
ai = int16 (a)
bi = int16 (b)
房颤= castIntToFi (ai)
男朋友= castIntToFi (bi)
cf = af *男朋友
这个输出所示
> > complex_fi_mult2
一个=
7 - 5我
b =
3 + 2我
c =
31 - 1我
ai =
int16
7 - 5我
bi =
int16
3 + 2我
房颤=
7 - 5我
numerictype (1 16 0)
男朋友=
3 + 2我
numerictype (1 16 0)
cf =
31 - 1我
33岁的numerictype (1 0)

1月
1月 2021年5月14日
如何将复杂的int16值转换为一个吗?
= int16(复杂(2、3)
一个=int162 + 3
b =单(4 + 5)
b =4.0000 + 5.0000我
c =单(a) * b
c =-7.0000 + 22.0000我