Fortran中内部函数fraction()的输出错误

bhq*_*asx 3 floating-point fortran

例如,我不理解FRACTION()的输出

write(*,*) fraction(553.334)
Run Code Online (Sandbox Code Playgroud)

它给了我0.5403652.

我认为它应该返回0.334,就像553.334-floor(553.334)那样.我的理解有什么问题?

Hig*_*ark 8

相反,该值恰好(在可用精度范围内)正确答案.我认为错误是你误解了什么fraction.要(在网上广泛使用,因为很多教程和其他指南)套用标准fraction(x)返回的小数部分模型表示x.x在大多数现代计算机上,模型表示是一种形式x*2^-k.实际上x,在您的示例中,函数返回的数字除以下一个最大幂2 553.034/1024 == 553.034*2^-10.

与计算机一样,RTFM(阅读Fortran手册).

  • pg 33上的例子似乎确实是错误的 (4认同)
  • 谢谢.看来我被这个笔记误导了http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/F90-Basics.pdf/br (2认同)

Pau*_*l R 7

fraction()不会做你认为它做的事情.它返回模型编号的小数部分(基数2).所以对于你的例子它返回:

553.334/1024 = 0.5403652
Run Code Online (Sandbox Code Playgroud)

与往常一样,如有疑问,请阅读文档.