РЕДАКТИРОВАТЬ: Я на Linux Mint 18.3 (Ubuntu 16.04) X64
Я прочитал в ряде других вопросов, что лучший способ выполнить произвольные функции в gdb - убедиться, что переменные ввода / вывода приводятся правильно.
Выражение p ((double(*)())floor)(2.12)
дает $1 = 2.1200000000000001
как и выражение p ((double(*)())ceil)(2.12)
но другие функции в математической библиотеке, кажется, работают, например, p ((double(*)())fmod)(12.,5.)
дает 2; p ((double(*)())sqrt)(64.)
дает 8. p ((double(*)())pow)(2.,2.)
дает 4, как и ожидалось.
Так что мой вопрос - в чем разница для функций double / ceil, которые не дают правильного значения. Похоже, тригонометрические функции также по какой-то причине не возвращают правильные значения. Кажется, что все они имеют одинаковые или похожие сигнатуры функций, поэтому я запутался, что происходит не так.
Библиотека math.h c является включаемым заголовком, но код также связан с библиотеками c ++ - не уверен, что это изменит.