Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
555 views
in Technique[技术] by (71.8m points)

double - Using scientific notation and underscore kind specifier at the same time for real literals in Fortran

Using scientific notation for floating point literals is easy enough in Fortran:

1.5d-10

would mean a double precision (whatever that means under current Fortran compiler settings) floating point value that approximates 1.5*10^-15.

However, the fusion of the exponent notation and the floating point kind specifier is a bit of an issue. How would one declare this floating point literal when one wants it to have a type of C_DOUBLE?

I know that this is a bit of a nitpicking issue, but there can be circumstances when double precision will not be the same as C_DOUBLE.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

A real literal may be specified by any of the following forms:

  • 1.2
  • 1.2e0
  • 1.2d0
  • 1.2_kind
  • 1.2e0_kind

This final one is an example of using a kind specifier and an exponent. So, specific to the question: 1.5e-15_C_DOUBLE.

There certainly can be cases where 1.5d-15 is not the same as 1.5e-15_C_DOUBLE. The kind of a double precision and real(C_DOUBLE) are choices by the Fortran and companion C compilers respectively.

Compilers which allow single and double precision literal constants to be promoted to higher kinds by a compiler flag won't touch real(C_DOUBLE).


For real values which have no decimal part, there are additional available forms:

  • 1.
  • 1e0
  • 1.e0
  • 1d0
  • 1.d0
  • 1.e0_kind
  • 1e0_kind

That is, the decimal part is optional, and if an exponent is given the decimal separator is also optional. Note however that 1 is an integer literal, while 1e0 and similar are real.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...