Hi,

some package maintainers including me got a reminder from Prof. Brian Ripley to modernize REAL and INTEGER declarations using the KIND option:

On 29.08.2023 at 19:31 Prof Brian Ripley wrote:
According to the Fortran standards, numerical values are just an enumeration, and what e.g. real(kind=4) means (or even if it is accepted) is implementation dependent.

We see such constructs in packages

[... line with packages deleted to avoid exposing the other packages and authors]

Please change them to something portable (kind(1.0) or kind(1.0d0} are commonly used, as is c_double from iso_c_binding).

Before 2023-09-26 to safely retain your package on CRAN (some of you have earlier deadlines for other issues).

We use a lot of legacy code that though partly modernized due to similar requests, still uses a mix of DOUBLE PRECISION and a few REAL(KIND=8) and COMPLEX(KIND=8). As the code will still remain legacy style with respect to some other constructs, I wonder what to use to go a step forward, but remain as consistent as possible, which is of course a compromise. I see the following options:

a) change REAL(kind=8) back to DOUBLE PRECISION that is again old style. It seems to be portable and is still widely used.

b) just formally change the few occurrences to:REAL(kind=0.0d) as suggested. It is easy, but inconsistency remains.

c) or, define "dp" as recommended in modern style guides and use it instead of REAL(kind=8) and the future also for DOUBLE PRECISION this way:

integer,parameter::dp=kind(0.0d0)

and then

real(dp)::a,b,c

However, this would need changes at many places, the mix between old and new constructswill generally get worse.

Another question is, that with either of these, we may not be sure to use 8 byte double. Changing this could influence for precision and pointer arithmetics.

Any recommendations? Thanks a lot!

Thomas

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to