Каковы общие стратегии для начала отладки числового кода, когда:
- код, скомпилированный с агрессивными флагами оптимизации, производит случайные NaN и Inf на выходе
- код, скомпилированный с
-g
(что подразумевает-O0
) для работы с отладчиком, больше не производит NaN и Inf?
В этом случае я работал с компилятором Portland Group C ++, pgCC, и использовал параметры оптимизации.
-w -fast -O3 -Mipa=fast -Mfprelaxed -Minline=levels:10
а потом просто
-w -g
для отладочной версии. Но я уверен, что похожая ситуация может произойти и с g++
.
РЕДАКТИРОВАТЬ: Добавление операторов печати - не очень привлекательный вариант, так как код написан не мной, это несколько тысяч строк, и я не знаю, чтобы сузить поиск; NaN могут возникать практически откуда угодно.