Исключение с плавающей точкой и coredump с использованием Virtual TMB
Я сталкиваюсь с ошибками NA/NaN с моим кодом TMB. Поиск в интернете, я обнаружил, что в том числе fenv.h
файл в мой код может дать мне подсказку об источнике ошибок.
Так как этот пример не работает в Windows, я решил последовать совету для запуска этого примера в Virtual TMB (потому что мой старый рабочий стол не может позволить себе запускать более одной операционной системы).
Но появилась новая проблема. я получил unused variable errors
после запуска кода. Этот код скопирован и вставлен по ссылке выше.
код cpp
// Illustrates how to make the debugger catch a floating point error.
#include <TMB.hpp>
#include <fenv.h> // Extra line needed
template<class Type>
Type objective_function<Type>::operator() ()
{
feenableexcept(FE_INVALID | FE_OVERFLOW | FE_DIVBYZERO | FE_UNDERFLOW); // Extra line needed
DATA_SCALAR(lambda);
PARAMETER(x);
Type f;
f = sqrt(-1.); // FE_INVALID ( sqrt(-1.) returns NaN )
//f = 1./0.; // FE_DIVBYZERO ( division by zero )
//f = exp(100000.); // FE_OVERFLOW ( exp(100000.) returns Inf ) [Does not work on all platforms]
//f = exp(-100000.); // FE_UNDERFLOW ( exp(-100000.) returns 0 )
return f;
}
и вот соответствующий код r для Linux
data <- list(lambda = 25)
parameters <- list(x=1)
require(TMB)
compile('nan.cpp','-fno-gnu-unique -O0 -Wall')
dyn.load(dynlib('nan'))
model <- MakeADFun(data, parameters)
fit <- nlminb(model$par, model$fn, model$gr)
rep <- sdreport(model)
print(rep)
Я прикрепил свой sessionInfo и предупреждающие сообщения через файлы изображений.
ошибка
nan.cpp: In instantiation of 'Type objective_function<Type>::operator()() [with Type =double]':
/home/tmb/r/library/TMB/include/tmb_core.hpp:1416:16: required from here
nan.cpp:7:15:warning:unused variable 'lambda' [-Wunused -variable]
DATA_SCALAR(lambda);
^
/home/tmb/r/library/TMB/include/tmb_core.hpp:199:32: note: in definition of macro 'DATA_SCALAR'
#define DATA_SCALAR(name) Type name(asVector<Type>( \
nan.cpp:8:13: warning: unused variable 'x' [-Wunused-variable]
PARAMETER(x);
^
/home/tmb/r/library/TMB/include/tmb_core.hpp:182:30: note: in definition of macro 'PARAMETER'
Как я могу решить эту проблему?
Спасибо!
Предупреждающее сообщение:
Информация о сессии: