7

Czy istnieje biblioteka kompilacji (metaprogramming szablonu) dla arytmetyki arbitralnej precyzji w C++?C++ biblioteka czasu kompilacji biblioteki

Potrzebuję tego, aby pomóc w ustalaniu arytmetycznych i binarnych skalowań w moim programie dla mikrokontrolerów AVR. Na przykład, gdy pomnożone zostaną dwie liczby z własnymi granicami, binary będą używane do obliczenia granic wyniku i przesunięcia punktu ułamkowego na wejściach i/lub wyjściach, stosownie do potrzeb. Ale granice wyniku mogą nie być reprezentowane w standardowych typach liczb całkowitych.

+0

Co masz na myśli przez "metaprogramowanie szablonów"? Biblioteki typu "BigInteger" praktycznie zawsze korzystają z dynamicznego przydzielania pamięci. W przeciwnym razie możesz po prostu użyć większego typu (tzn. Podpisanego int64 do pomnożenia dwóch podpisanych int32). – DarkWanderer

+2

@DarkWanderer Mam na myśli, dobrze, metaprogramowanie szablonów. Ten link powinien dać ci wyobrażenie, jak binarne mogą być implementowane w czasie kompilacji: http://alpmestan.wordpress.com/2009/12/03/functional-compile-time-templates-based-type-lists-in-c/ . Zasadniczo, binarny czas kompilacji byłby typem (rekursywnym), a kompilator zajmowałby się przydzielaniem pamięci. –

+0

@DarkWanderer Duży typ całkowity jest niewystarczający - mój problem polega na radzeniu sobie z granicami typów w czasie kompilacji, i muszę mieć kontrole-czeki sprawdzające coś wzdłuż linii "A + B INT64_MIN ". Skompilowane czasy pozwalają na zapisanie ich "bezpośrednio" bez obawy o przepełnienie liczby całkowitej. –

Odpowiedz

1

Prawdopodobnie Boost.Multiprecision jest tym, czego szukasz.

+0

Dokumentacja określa "Jednak nie będzie możliwe wykonywanie arytmetycznych obliczeń na tego typu typach." –