科学记数法是表达具有明确数量级的数字的常用方法。首先是一个非零数字,然后是一个小数点,然后是一个小数部分,然后是指数。在二进制中,只有一个可能的非零数字。

浮点数学运算涉及一个等于1的隐式第一个数字,然后尾数位“跟随小数点”。

那么,为什么frexp()为什么将基数指向隐式位的左侧,并在[0.5,1)中返回一个数字,而不是像科学记号一样的[1,2)?有没有要提防的溢出?

实际上,它比IEEE 754/ISO 60559指定的偏置值多减去一个。在硬件中,这有可能将加法器换成XOR。考虑到在许多情况下要恢复正常,将需要另一个浮点运算,这似乎是一个很弱的论点。

最佳答案

rationale说:



可以推测,使用frexp的约定可以更方便地编写“库的其余部分”,或者传统上已经针对该接口(interface)编写了“库的其余部分”,尽管它没有提供任何好处。

我知道这并不能完全回答问题,但是它并不完全适合评论。

我还应该指出,在C语言设计中做出的某些选择早于IEEE754。也许frexp返回的格式与PDP-11的浮点格式或其他任何体系结构有意义首先引入了frexp函数。编辑:对于一种PDP-11模型,另请参见manual的155页。

关于c - 为什么frexp()不产生科学计数法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24928833/

10-11 16:44