Я просто потратил некоторое время на разработку этого и хотел документировать это здесь: Если вы хотите получить плотность вероятности (в точке x
) из трех возвращаемых значений lognorm.fit
(давайте назовем их (shape, loc, scale)
) , вам нужно использовать эту формулу:
x = 1 / (shape*((x-loc)/scale)*sqrt(2*pi)) * exp(-1/2*(log((x-loc)/scale)/shape)**2) / scale
Итак, в качестве уравнения, которое есть (loc
это µ
, shape
это σ
и scale
это α
):
В зависимости от того, какой компилятор вы используете, должен быть способ увидеть код после препроцессора (который выполняет расширение макроса, макросы не известны компилятору в все) выполнено.
В gcc опция -E . Вот упрощенный пример, использующий игрушечный код, а не фактический макрос GTK +:
~/tmp> cat cpptest.c
#define SET_FLAGS(w, f) ((w)->flags |= (f))
int main(void)
{
SET_FLAGS(0, 4711);
return 0;
}
~/tmp> gcc -E cpptest.c
# 1 "cpptest.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "cpptest.c"
int main(void)
{
((0)->flags |= (4711));
return 0;
}
Многие IDE покажут вам расширенную версию макроса в редакторе при наведении указателя мыши на идентификатор (или каким-либо другим способом). Я знаю, что Eclipse / CDT делает это, и Visual Studio делает это (по крайней мере, VS 2008).
Создание компилятором предварительно обработанных выходных данных может быть полезно, если вы отслеживаете сложную проблему, но изо дня в день используйте там, где вы просто хотите знать, что происходит с кодом на экране, используйте IDE.
В Visual Studio вы можете сгенерировать файл единицы перевода, полученный препроцессором. Вы можете перейти к параметрам проекта, C / C ++ / Препроцессор и поставить «Создать предварительно обработанный файл» или «Предварительная обработка в файл» на Да (или использовать переключатель компилятора / P или / EP для включения номеров строк или нет).
Если вы используете gcc, вы также можете запустить
cpp myfile.c
Вы хотите запустить только стадию препроцессора вашего компилятора, отвечающую за раскрытие макросов. Для gcc
это "gcc -E", но насчет других компиляторов я не уверен.
gcc даже с -E нужен путь к файлам заголовков ... например, -I _path_to_your_headers ...
Если у вас есть Makefile, как правило, то, что вы могли бы сделать, закончилось -riding CC с помощью gcc -E
Как правило, cpp - это всего лишь сценарий, добавляющий некоторые флаги в gcc для препроцессора, как традиционный ...
Вы пробовали запускать gcc -E несколько раз, пока не исчезнут макросы?