为什么数据成为零当使用函数fi ?
13个视图(30天)
显示旧的评论
调频= get_fimath ();
idx = fi (1 0 1 0 fm);
= (idx + fi (2 0 2 0 fm)) * fi (1/3, 0, 16、17、fm);
k = fi(0, 0, 17日,fm)
函数调频= get_fimath ()
调频= fimath (“RoundingMethod”,“地板”,…
“OverflowAction”,“包装”,…
“ProductMode”,“FullPrecision”,…
“MaxProductWordLength”,128,…
“SumMode”,“FullPrecision”,…
“MaxSumWordLength”,128);
结束
这段代码是使用Matlab编码器时生成的。我想知道为什么k等于零?是因为分裂的1/3吗?
0评论
接受的答案
Divyam古普塔
2021年6月30日
嗨,迈克,
在
fimath
功能,您已经设置
RoundingMethod
参数,
地板上
。1/3时击倒导致0作为回答。这就是你要的原因
k
为0。你可以考虑改变
RoundingMethod
参数按你想要的结果。
希望这个有帮助。
答案(1)
安迪·巴特利特
2021年6月30日
编辑:安迪·巴特利特
2021年6月30日
就像科学记数法
简短的回答“为什么可以大于字FractionLength ?”。
长回答如下。
二进制小数点的概念是非常有用的定点类型的初步理解。同样,小数点是有用的概念对于理解价值观之外的整数。但使用小数点变得非常繁琐的非常大或非常小的数字。使它容易表示非常大或非常小的值,科学记数法非常有价值。
verySmallNumber = 3 e - 200;
veryBigNumber = 7 e123;
本质上,这个符号把价值分为两个部分,一个尾数和整数指数为给定的基础。
Y =尾数。* 10 ^指数
除了定点遵循相同的概念
- 基本是2
- 尾数必须是一个整数
- 指数是固定的,即它的变量类型和变量的生活并没有改变
Y = intMantissa。* 2 ^ FixedExponent
FractionLength = -FixedExponent以来,我们也可以这样写如下。
Y = intMantissa。* 2 ^ -FractionLength
fi的优点是,我们可以让它找出出最好的精确的比例常数。
verySmallNumberFi = fi (3 e - 200 0 8)
veryBigNumberFi = fi (7 e123 0 8)
注意到非常大的积极和消极FractionLengths生产的670年和-404年。
verySmallNumberFi =
3.00068384319763 e - 200
numerictype (0, 8670)
veryBigNumberFi =
6.982403670347 e + 123
numerictype (0, -404)
Fi近似原始的双值使用8位无符号整数尾数。
147 * 2 ^ -670
169 * 2 ^ 404
这只是科学记数法基础2。