我正在阅读David Goldberg的文章What Every Computer Scientist Should Know about Floating-Point Arithmetic。文章说:
其中β
是基数,p
是精确的。
我可以理解有e^{max} - e^{min} + 1
个可能的指数,但为什么β^p
可能有意义?为什么有\lceil log_2 [snip...] + 1
位?
(我在网上搜索过但发现浮点运算的数据很少。)
答案 0 :(得分:4)
根据定义,有效数是基数β中的p“数字”序列,其中基数β中的数字是β可能值之一,从表示0的数字到表示β-1的数字。
p位数序列有多少选择,其中每个数字都有β个可能的值?答案是β p :第一个数字有β选择,第二个数字有β选择,可以独立于第一个数字选择,依此类推。
例如,可以在β*β或β 2 值中选择两位数的有效数。
对于一个更具体的例子,在十进制(β= 10)中,有1000个有效数字,长度为3,从000到999.这1000种可能性可以用10位编码,并仔细编码(编码每个十进制数字) 4位不起作用,但更复杂的东西,因为10位,很好用,可以编码1024种可能性。)
表达式“log 2 (β p )”只是根据信息理论对这些可能性进行编码的最小位数。此表达式的上限在您的问题中的公式中采用,以将位数四舍五入为整数,以表示有效数字的自包含表示。如果一个人要比逐位数更有效地编码有效数字,那么也可以从指数的表示中借用一半(也可能不使用它的所有位),但这是最小的问题每个计算机科学家应该知道的关于浮点运算的知识。
公式末尾的“+ 1”与有效数字无关,但与符号位相对应,如注释所示。
注意如果你坚持使用二进制,你应该这样做,因为这可能是你在实践中唯一需要的东西,那么表示有效数字所需的位数是有效数字的位数!关于任意基浮点的实际上无关紧要的讨论是困扰浮点数的许多解释的祸害之一。他们使这个主题变得更加困难和可怕。