给定IEEE-754单精度格式(在某些语言/平台中通常称为float
)中表示的任意数字,我可以确定该数字也可以用双精度格式精确表示?
如果是这样,当考虑半精度到单精度和双精度到四倍精度时,该属性是否有效?
答案 0 :(得分:5)
是的,double可以表示浮点数可以包含的任何数字。同样适用于四精度等等。
浮点数以1.01b x 2^-1
(在这种情况下为0.625)的形式表示。数字的重要组成部分是有效数字,它基本上是一个二进制数,通常在第一个数字后面加上小数点和指数。
二进制浮点格式之间唯一的主要区别是每个组件的位数。数字使用的位越多,每个部分可用的位数就越多。因此,对于有效数字,32位“float”可能具有1.01000000000000000000000,而(64位)“double”在该点之后将具有大约50位数。这意味着在float中可以精确表示的任何数字也可以在double中精确表示,因为您具有更高的精度(读取:更高有效数字)和增加的范围。它类似于64位整数变量如何保存任何32位整数;额外的比特几乎没有用完。
当然,任何由于舍入错误而被切断的位都不会使它在转换为double时返回到数字 - 意味着你的浮点数为0.3,这是一个不精确的结果,如0.2999999875或某些东西(我不喜欢计算),当你把它转换成双倍时,它不会接近0.3 - 它仍然会是0.2999999875。如果你想要更近似,你需要从头开始用双精度重做计算。
答案 1 :(得分:3)
是。事实上,你可以做出更强有力的陈述:两个单精度数字的每个产品都可以精确地表示为双精度(同上半数,单数或双数和四数)。