This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: raising FE_INEXACT flag using constants in arithmetic operations (division)


This is because the Optimize Option "-fno-rounding-math" is set by default, hence the constant 1/3 is evaluated while compiling using the default rounding mode (round-to-zero for all floating point to integer conversions, and round-to-nearest for all other arithmetic truncations).

One can use "-frounding-math" for programs to be executed with a non-default rounding mode.

Regards,

Khalil

-----Original Message-----
From: libc-help-owner@sourceware.org on behalf of GHORBAL Khalil 218205
Sent: Tue 6/10/2008 3:09 PM
To: libc-help@sourceware.org
Subject: raising FE_INEXACT flag using constants in arithmetic operations (division)
 

Hi all,

I'm getting confused with the following source code and couldn't explain why the exception (here FE_INEXACT) is not raised.
the float stored in variable f is not exactly a floating point number and hence shall be round (to nearest as default behaviour).

Thanks in advance for your comments/help.

Best regards,
Khalil.

<<<<<<<<<< source >>>>>>>>>>>>>
#include <stdio.h>
#include <stdlib.h>
#include <fenv.h>
#include <math.h>

int main (void)
{
        double f;
        int raised;

        feclearexcept (FE_ALL_EXCEPT);
        f = (double)((double)1.0/(double)3.0);

        raised = fetestexcept (FE_INEXACT);
        if (raised) printf("FE_TONEAREST : %a\n", f);
        return 0;
}
<<<<<<<<<< end >>>>>>>>>>>>>


Some machine related informations:

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 CPU         U7500  @ 1.06GHz
stepping        : 2
cpu MHz         : 1064.063
...
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
...

$ uname -a
Linux xxxx 2.6.22-3-686 #1 SMP Mon Nov 12 08:32:57 UTC 2007 i686 GNU/Linux

$ gcc --v          
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --with-tune=i686 --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)

linking with :
libm-2.3.6
libc-2.3.6

--
Khalil.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]