Hallo, ich teste gerade mit dem gcc und speziell mit dem Datentyp long double, weil ich den Datentyp vom darstellbaren Zahlenbereich her brauche (möglicher Exponent kleiner als 1.0E-308, was bei einem normalen double die Untergrenze ist). Beim Testen verhält sich der gcc jedoch sehr merkwürdig, was ich (momentan) nicht nachvollziehen kann. Hier das Testprogrmm:
#include <stdio.h> void main() { double d; long double d2;
printf("sizeof(d)=%d, sizeof(ld)=%d\n",sizeof(d),sizeof(d2));
d=1.0E-200; d2=1.0E-200;
printf("d =%25.18E\n",d); printf("ld=%25.18E\n",d2);
d2=d2*d2; printf("d =%25.18E\n",d); printf("ld=%25.18E\n",d2);
d=d*d; printf("d =%25.18E\n",d); printf("ld=%25.18E\n",d2);
}
und die Ausgabe:
sizeof(d)=8, sizeof(ld)=16 d =9.999999999999999821E-201 ld=9.999999999999999821E-201 d =9.999999999999999821E-201 ld=9.999999999999999821E-201 d = 0.000000000000000000E+00 ld= 0.000000000000000000E+00
Nach der 1. Multiplikation d2*d2 scheint garnichts zu passieren ? Nach der 2. Multiplikation d*d wird auch d2 aufeinmal geändert ? Von Ergebnis her hätte ich erwartet, daß d2 den Wert noch darstellen kann, also Ergebnis 1.0E-400 ? Kompiliert habe ich das ganze unter Suse 12.3 64 bit mit
gcc double_test.c -lm -o double_test
gcc-Version ist:
gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Was mache ich falsch ? Muß ich beim Kompilieren noch spezielle weitere Module angeben ? Kann ich auch den nativen FPU-Typ Extended (mit 80Bit) ansprechen ? Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org