为什么数据成为零当使用函数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吗?

接受的答案

Divyam古普塔
Divyam古普塔 2021年6月30日
嗨,迈克,
fimath 功能,您已经设置 RoundingMethod 参数, 地板上 。1/3时击倒导致0作为回答。这就是你要的原因 k 为0。你可以考虑改变 RoundingMethod 参数按你想要的结果。
希望这个有帮助。
3评论
迈克•约翰
迈克•约翰 2021年7月1日
我已经知道我的问题的答案。再一次感谢您!

登录置评。

答案(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。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!