科学的表示法是表达一个明确数量级的数字的常用方法。首先是一个非零的数字,然后是一个基点,然后是一个分数部分,然后是指数。在二进制中,只有一个可能的非零数字。
浮点数学涉及一个等于1的隐式第一位数字,然后尾数位“跟随基数点”。
那么,为什么frexp()将基指向隐式位的左边,并返回一个数字在[0.5,1]中,而不是像科学表示法那样的[1,2]?有什么值得提防的溢出吗?
有效地,它减去一个以上的偏置值指定的IEEE 754/ISO 60559。在硬件中,这可能会将添加的XOR交换为XOR。单就这一点而言,这似乎是一个相当弱的论点,因为在许多情况下,恢复正常需要另一个浮点操作。
发布于 2014-07-24 09:00:05
理据说:
4.5.4.2 frexp函数 函数frexp、ldexp和modf是库的其余部分使用的原语。有一些情绪,放弃他们的原因,相同的原因,电子gcvt,fcvt,和gcvt,但他们的追随者拯救了他们的一般用途。它们的使用是有问题的:在非二进制架构上,ldexp可能会失去精度,而frexp可能效率低下。
可以推测,“库的其余部分”使用frexp的约定编写更方便,或者传统上已经针对这个接口编写,尽管它没有提供任何好处。
我知道这并没有完全回答这个问题,但这并不完全符合我的意见。
我还应该指出,C语言设计中的一些选择早于IEEE 754。frexp 返回的格式可能与PDP-11的浮点格式或其他任何最初引入函数frexp的体系结构都有关系。编辑:也见第155页的手册为一个PDP-11模式.
https://stackoverflow.com/questions/24928833
复制相似问题