Pot*_*ter 9 c floating-point posix ieee-754
科学记数法是表达具有明确数量级的数字的常用方法.首先是非零数字,然后是小数点,然后是小数部分和指数.在二进制中,只有一个可能的非零数字.
浮点数学涉及隐含的第一个数字等于1,然后尾数位"跟随小数点".
那么为什么frexp()将小数点放在隐含位的左边,并返回[0.5,1]中的数字而不是像科学符号那样的[1,2]?是否有一些溢出要小心?
实际上,它比IEEE 754/ISO 60559规定的偏差值减去一个以上.在硬件中,这可能会增加XOR的附加值.考虑到在许多情况下恢复正常将需要另一个浮点运算,这似乎是一个相当弱的论点.
Pas*_*uoq 12
的理由说:
4.5.4.2 frexp函数
函数frexp,ldexp和modf是库的其余部分使用的基元.由于ecvt,fcvt和gcvt被丢弃的原因相同,有一些人放弃它们的情绪,但他们的追随者将它们救出以供一般使用.它们的使用是有问题的:在非二进制体系结构上,ldexp可能会失去精度,而frexp可能效率低下.
可以推测,"库的其余部分"使用frexp约定更方便,或者传统上已经针对此接口编写,尽管它没有提供任何好处.
我知道这并没有完全回答这个问题,但它并不适合评论.
我还应该指出,在C语言设计中做出的一些选择早于IEEE 754. 也许frexp是PDP-11的浮点格式或其他任何体系结构所返回的格式.frexp最初是介绍.编辑:另请参阅手册的第155页,了解一个PDP-11型号.