Print

Print


Here's the page with the info on fpe handling:

http://gcc.gnu.org/onlinedocs/gcc-3.3.5/g77/Floating_002dpoint-Exception-Handling.html

The phosim package doesn't use libraries of its own, so rather than
using the suggested trick, it works just to put the code block at the
top of some executable such as raytrace/main.cpp:

diff --git a/source/raytrace/main.cpp b/source/raytrace/main.cpp
index b818404..925a8fc 100644
--- a/source/raytrace/main.cpp
+++ b/source/raytrace/main.cpp
@@ -16,6 +16,15 @@

 #include "image.h"

+#define _GNU_SOURCE 1
+#include <fenv.h>
+static void __attribute__ ((constructor))
+trapfpe () {
+   /* Enable some exceptions.  At startup all exceptions are masked.  */
+
+   feenableexcept (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW);
+}
+
 int main() {

        Image im;

In the ./phosim examples/star -c examples/nobackground run, one first
encounters a bug in dust.cpp that is easy to fix.  The next FPE is in
a line I would be loathe to debug:

Program received signal SIGFPE, Arithmetic exception.
asphere (surface=0x3477dd0, surface_r=0x34a6bf0, surface_normal=0x348f4e0,
    numelements=1000, radiusofcurv=<value optimized out>,
    spacing=3892.3446079999994, semidiameter=551, holesemi=0, conic=0, third=0,
    fourth=0, fifth=0, sixth=0, seventh=0, eighth=0, ninth=0, tenth=0)
    at raytrace.cpp:381
381
*(surface+i)=spacing-(pow(surface_r[i],2.0)/radiusofcurv/(1.0+sqrt(1.0-(conic+1.0)*pow(surface_r[i]/radiusofcurv,2.0)))+third*pow(surface_r[i],3.0)+fourth*pow(surface_r[i],4.0)+fifth*pow(surface_r[i],5.0)+sixth*pow(surface_r[i],6.0)+seventh*pow(surface_r[i],7.0)+eighth*pow(surface_r[i],8.0)+ninth*pow(surface_r[i],9.0)+tenth*pow(surface_r[i],10.0));
(gdb)


-- 
James Chiang          SLAC, MS 29           home:   (650) 605-3346
Fermi ISOC            2575 Sand Hill Rd     office: (650) 926-2930
                      Menlo Park CA 94025   FAX:    (650) 926-5566

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the PHOSIM-DEV list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=PHOSIM-DEV&A=1