gpt4 book ai didi

matlab - 具有 1 位的 Matlab 定点数的行为

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:03 27 4
gpt4 key购买 nike

我注意到 Matlab-FI 数字有一个有趣的行为。它只出现在 1 位有符号数(一种在实践中没有多大意义的数据类型)中。我知道将 double 与 fi 相乘不是一个好的做法,行为甚至可能取决于 Matlab 版本,但我希望行为是相同的,与位数无关。这在 2011b、2013a 和 2013b 版本中似乎是一致的,我想了解为什么会这样。

示例 1: -1 可以表示为 1 位,有符号。然而,结果的小数部分为 -2,这将只允许数字 [-8, -4, 0, 4]

>> a = fi(-1,1,1,0)
a = -1
s1,0

>> 1*a
ans = 0
s2,-2

示例 2:1 位无符号行为符合预期,小数部分未更改

>> b = fi(1,0,1,0)
b = 1
u1,0

>> 1*b
ans = 1
u2,0

示例 3:一个 2 位,带符号的行为符合预期,小数部分不变,整数部分扩展

>> c = fi(-2,1,2,0)
c = -2
s2,0

>> 1*c
ans = -2
s4,0

示例 4: 另一个带符号的 1 位显示与示例 1 类似的行为。

>> d = fi(-0.5,1,1,1)
d = -0.5000
s1,1

>> 1*d
ans = 0
s2,-1

最佳答案

当 matlab 将不同格式的数字相乘时,它首先改变格式。如果将 1 转换为与您的值相同的格式,有时这种格式的第一个是 0,因此乘积为零是有道理的,一切都是正如预期的那样。

示例 1

a = fi(-1,1,1,0); a_one = fi(1,1,1,0); disp([a, a_one, a*a_one])
-1 0 0

DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 1
FractionLength: 0

示例 2

b = fi(1,0,1,0); b_one = fi(1,0,1,0); disp([b, b_one, b*b_one])
1 1 1

DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 1
FractionLength: 0

示例 3

c = fi(-2,1,2,0); c_one = fi(1,1,2,0); disp([c, c_one, c*c_one])
-2 1 -2

DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 2
FractionLength: 0

示例 4

d = fi(-0.5,1,1,1); d_one = fi(1,1,1,1); disp([d, d_one, d*d_one])
-0.500000000000000 0 0

DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 1
FractionLength: 1

关于matlab - 具有 1 位的 Matlab 定点数的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21230989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com