This is the mail archive of the
libc-help@sourceware.org
mailing list for the glibc project.
raising FE_INEXACT flag using constants in arithmetic operations (division)
- From: "GHORBAL Khalil 218205" <khalil dot ghorbal at cea dot fr>
- To: <libc-help at sourceware dot org>
- Date: Tue, 10 Jun 2008 15:09:42 +0200
- 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.