Strange SIGFPE (underflow?) with gfortran [ -mieee ?]
Kay Diederichs
kay.diederichs@uni-konstanz.de
Fri Oct 20 10:46:00 GMT 2006
Rob wrote:
> Rob <spamrefuse at yahoo dot com> wrote:
>> I'm using GCC 4.1.2, from SVN as of about two weeks
>> ago. It's on an AlphaServer system with Linux
>> installed.
>>
>>
>> I have this piece of Fortran code:
>>
>> R1=-708.397
>> R2=EXP(R1)
>> R3=1-R2
>>
>> Compiling with gfortran is OK. However, when running
>> the executable, I get an SIGFPE Arithmetic exception
>> at the line with the R3 assignment. Using gdb, I get
>> these values:
>>
>> R1 = -708.39697265625
>> R2 = 2.2238412332569656e-308
>> R3 = 0
>>
>> The value of R3 should be 1, as R2 is close to zero.
>> I suppose the FPE is an underflow exception, but
>> why is the underflow not squashed to zero?
>>
>>
>> However, when I change the first line to
>> R1=708.396
>>
>> (change last digit from 7 to 6) then the SIGFPE
>> disappears when running the executable. In that
>> case I have (using gdb):
>>
>> R1 = -708.39599609375
>> R2 = 2.2260140139667223e-308
>> R3 = 1
>>
>>
>> Is this a problem with the gfortran compiler?
>>
>> Is there a flag I can pass during compilation
>> and/or linking, to avoid such problems?
>
> I kind of solved this problem with the "-mieee"
> flag, a specific flag for the Alpha system.
> I have two concerns here:
>
> 1) Do I still get the correct arithmetic with
> this flag? I mean, I don't want to suppress
> the SIGFPE and continue the program with
> random values in my variables.
>
> 2) The manpage says that the -mieee flag will
> produce less efficient code. Is there another
> flag that also solves my problem, but without
> compromising on the code's efficiency?
>
> Thank you!
> Rob.
Rob,
what I don't understand in your posting is that you not only "change
last digit from 7 to 6" but you also change the sign of R1 (from - to +)?
More information about the Fortran
mailing list