什么是低于正常的浮点数?
isnormal()参考页面告诉:
确定给定的浮点数arg是否正常,即不是零,低于正常,无限,也不是NaN。
一个数字是零,无限或NaN清楚是什么意思。 但是它也说低于正常水平。 什么时候是一个数字低于正常?
在IEEE754标准中,浮点数表示为二进制科学记数法, x = M × 2e 。 这里M是尾数 , e是指数 。 在math上,可以总是select指数使得1≤M<2。但是,由于在计算机表示中指数只能有一个有限的范围,所以有一些大于零的数字,但小于1.0× 2e 分 这些数字是次正常的或非正常的 。
实际上,尾数存储没有前导1,因为总是有前导1, 除了低于正常数(和零)。 因此,解释是如果指数是非最小的,则存在隐含的前导1,并且如果指数最小,那么不存在,并且数目是低于正常的。
*)更一般地说,对于任何base- B科学记数法,1≤M< B 。
从http://blogs.oracle.com/d/entry/subnormal_numbers :
可能有多种表示相同数字的方法,以小数为例,数字0.1可以表示为1 * 10 -1或0.1 * 10 0甚至0.01 * 10。标准规定数字总是与作为一个第一位。 以十进制表示,对应于1 * 10-1的例子。
现在假设可以表示的最低指数是-100。 所以可以以正常forms表示的最小数目是1 * 10 -100 。 但是,如果我们放宽领先位是一个的约束,那么我们实际上可以在相同的空间中代表较小的数。 以小数为例,我们可以表示为0.1 * 10 -100 。 这被称为低于正常的数字。 具有次正数的目的是平滑最小正态数与零之间的差距。
认识到低于正常数的精度低于正常数是非常重要的。 事实上,它们的尺寸越小,精度越低。 因此,使用低于正常数字的计算不会像在正常数字上的计算那样具有相同的精度。 因此,对低于正常数进行重要计算的应用程序可能值得研究,以查看是否重新缩放(即将数字乘以某个缩放因子)将产生更less的子正常,并获得更准确的结果。