Откуда берется плавающая точка в Linux?
Большая, вернее, длинная задача. Масса вычислений, но все - целочисленные. Работала на VC++. Из-за долготы работы решено было перебросить ее на linux-сервер, пусть себе потихоньку считается. Переброшена, скомпилирована, запущена. Через достаточно длительное время (из-за чего просто так не отладишь) слетает с воплем "Исключение в операции с плавающей точкой".
При этом на VC++ это место проходит совершенно спокойно.
Я не могу назвать себя специалистом в linux и gcc, так что обращаюсь с вопросом - куда надо посмотреть, что отследить (может, какие ключи компиляции использовать), чтоб понять, что происходит.
Ни одного слова double или float в исходниках нет. Не подключен даже math.h :)
g++ --ver говорит:
Используются внутренние спецификации.
Целевая архитектура: x86_64-redhat-linux
Параметры конфигурации: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Модель многопоточности: posix
gcc версия 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
Смотрите краткое описание здесь, SIGFPE вызывается и для целочисленных операций.
https://ru.wikipedia.org/wiki/SIGFPE
Ищите в коде ошибки переполнения, деления на 0 и т.п.
Начните с команд list и bt в gdb.