A floating-point puzzle

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Wed Aug 5 04:10:58 PDT 2009


Here's a puzzle for you floating-point wizards out there. I have to 
translate the following snippet of FORTRAN code to D:

       REAL B,Q,T
C     ------------------------------
C     |*** COMPUTE MACHINE BASE ***|
C     ------------------------------
       T = 1.
10    T = T + T
       IF ( (1.+T)-T .EQ. 1. ) GOTO 10
       B = 0.
20    B = B + 1
       IF ( T+B .EQ. T ) GOTO 20
       IF ( T+2.*B .GT. T+B ) GOTO 30
       B = B + B
30    Q = ALOG(B)
       Q = .5/Q

Of course I could just do a direct translation, but I have a hunch that 
T, B, and Q can be expressed in terms of real.epsilon, real.min and so 
forth. I have no idea how, though. Any ideas?

(I am especially puzzled by the line after l.20. How can this test ever 
be true? Is the fact that the 1 in l.20 is an integer literal significant?)

-Lars


More information about the Digitalmars-d-learn mailing list