On 5/12/26 12:14 PM, Harald Anlauf wrote:
Hi Jerry,

Am 11.05.26 um 8:24 PM schrieb Jerry D:
Hi all,

This took me a lot longer than I wanted, but finally got it done.

See the attached patch. Since my last submittal here I started over on using the example demo Harald gave in Comment 18 of the PR using available higher level C functions, fabs, signbit, scalbn, isnan frexp, etc to extract the needed components. Then, using the %H specifier to build the hexadecimal float string in get_float_hex_string(). I added checks for zero, inf, nan, and the sign.

Once I had this working for kind=8, I repeated the pattern for kind=8, 10, and 16. I used defines around the kind=10 and 16 to avoid where not supported.

I also created defines for the C functions needed following the examples later in the file. I dont have some of those platforms readily available here so a web searched for those various function, ie not tested yet. I will call it an EWAG. Engineering Wild Assumption and Guess.

I apologize for the whitespace cleanups. I had them in my worktree from earlier attempts.

I updated the two test cases added. I probably need to specify targets on those. We can add additional testcases as deemed appropriate.

Regression tested here on X86_64. Testing by others encouraged.

OK for mainline. I do not plan any backport and less others think its worth it.

this is already in a quite good shape.  However, I have two
preliminary comments:

- rounding is not yet correct.  Example:

   real(4) :: r4
   r4 = 128.
   write(*,"(*(4x,EX0.2))") r4, abs (nearest(r4,-1.0))

prints

     0X8.00P+4    0XF.FFP+3

but should print

     0X8.00P+4    0X8.00P+4

- real(10) and real(16) are not available everywhere.
   Please have a look at gfortran.dg/ieee/ieee_11.F90
   for one way to solve this.

Best,
Harald

Best regards,

Jerry

PS I will be on travel the next 7 day however I can monitor email.


I will add the checks for real(10) and real(16) to the test case.

I would like to commit this now and handle the rounding in a new PR or leave this one open and identify this as patch 1 of 2.

Is this OK?

Jerry

Reply via email to