我试着阅读有关浮点实现的IEEE标准,但它对我来说非常先进,而且我没有为生活而编程。
这是我想知道的。
假设我有一个介于0和N之间的浮点变量,我会在需要时将其缩放,但中间计算将在此非标准化值中完成。
逻辑上,范围[0.0, 1.0]
就足够了。但如果我将数字限制在0和1之间,我会以某种方式失去精确度吗?如果我使用[0, 10.0]
或[0, 1000000.0]
?
谢谢。
答案 0 :(得分:2)
你的想法很好,但你不保存任何东西,因为从某种意义上说,浮点数就是为你做的。
在内部,浮点数有两个部分,称为尾数和指数。尾数等于你的范围,指数是使它达到“真实”值所需的缩放。
您给出的任何数字都会标准化为[1-9.999 ...]加上10倍乘数的范围。所以你得到几乎所有值的尾数的精度(唯一的例外是当你到达指数的极值时 - 这些被称为“非规范化数字”(或“次正规”),但是非常小(接近于零)或大,而不是你需要担心的东西,通常)。
因此,无论您输入1.23还是12.3或123,它都会在内部存储为1.23(尾数)加上因子(1,10或100,指数)。
实际上,这并不完全正确,因为它使用2(二进制)的幂而不是10(十进制)的幂(参见sixletter变量的注释),但它是相同的一般想法。