Właśnie zaimplementowałem (jeszcze raz) szablon rekurencyjny do obliczania silni liczby całkowitej w czasie kompilacji (kto by pomyślał, że pewnego dnia będę go potrzebować!). Jednak zamiast przetaczać własne, poszedłem do Boost szukając odpowiedzi. Jednak funkcja silni w specjalnej matematyce wyraźnie zabrania jej używania z typami całkowitymi, więc napisałem własną.Obliczanie silni małej liczby całkowitej w czasie kompilacji
Nadal czy jest jeszcze inna funkcja w Boost, której powinienem użyć? Czy powinienem rzucić moją liczbę całkowitą na double
i użyć funkcji boost::factorial
? Czy obliczenia wykonywane są w czasie kompilacji?
Istnieje ograniczona głębia, na której szablon może się powtarzać, więc przyspieszenie IRL z obliczania silni podczas kompilacji nie jest zbyt duże (szczególnie, jeśli używasz programowania dynamicznego). –
Zobacz odpowiedź "R .." pod tym pytaniem: http://stackoverflow.com/questions/3786207/howto-compute-tactiv-ofactor-x. Przepełnienie jest bardzo prawdopodobne, dlatego Boost nie chce, abyś użył int do tego. – mwigdahl
@mwigdahl Mogę zmieścić do 20! do niepodpisanego długiego int, który jest większy niż to, czego potrzebuję (jednak sprawdzenie przepełnienia byłoby jednym z powodów, które skłoniłyby mnie do preferowania używania funkcji bibliotecznej, moja implementacja tego nie sprawdza). – gnzlbg