Forum jest zablokowane. Podczas blokady nie można dodawać ani edytować wiadomości.
Temat: Problem Colltaza - przepełnienie arytmetyczne
Dzień dobry,
piszę w sprawia podanego w tytule zadania, ponieważ próbując stworzyć algorytm do niego napotykam pewien problem. Otóż niektóre wyrazy ciągów są zbyt duże by pomieścić się w największym dostępnym typie ( 8 bajtowym unsigned long long ), co powoduje przepełnienia arytmetyczne, oraz w wyniku, błędne odpowiedzi programu. Dobrym przykładem jest np, ciąg dla 110243094271 o długości 573'ech wyrazów. Ciąg ten, generowany dla tej samej liczby, ale przy użyciu int'ów 64 bitowych ma długość 736 - doszło do przepełnienia i podania błędnego wyniku. Zdaję sobie sprawę z wymagań jakie stawia olimpiada przed naszymi programami, jednak z racji iż ani standard, ani kompilator g++, nie zawierają natywnej obsługi typów 128 bitowych, chciałbym zapytać czy dopuszczalne jest użycie jakieś biblioteki zewnętrznej, dostarczającej opisywany typ, wraz z podstawowymi operacjami arytmetycznymi na nim. A nawet jeżeli nie jest to dopuszczalne, w programie wysyłanym przez SIO2, czy użycie takowej było by już dozwolone w programie pre-generującym odpowiedzi, gdybym postanowił, tak jak pokazano tutaj (https://oij.edu.pl/zawodnik/zadania/samouczek/cpp/) wygenerować wszystkie odpowiedzi na własnej maszynie i zapisać je w formie tablicy w programie docelowym?
Pozdrawiam
Kacper Odzimek
piszę w sprawia podanego w tytule zadania, ponieważ próbując stworzyć algorytm do niego napotykam pewien problem. Otóż niektóre wyrazy ciągów są zbyt duże by pomieścić się w największym dostępnym typie ( 8 bajtowym unsigned long long ), co powoduje przepełnienia arytmetyczne, oraz w wyniku, błędne odpowiedzi programu. Dobrym przykładem jest np, ciąg dla 110243094271 o długości 573'ech wyrazów. Ciąg ten, generowany dla tej samej liczby, ale przy użyciu int'ów 64 bitowych ma długość 736 - doszło do przepełnienia i podania błędnego wyniku. Zdaję sobie sprawę z wymagań jakie stawia olimpiada przed naszymi programami, jednak z racji iż ani standard, ani kompilator g++, nie zawierają natywnej obsługi typów 128 bitowych, chciałbym zapytać czy dopuszczalne jest użycie jakieś biblioteki zewnętrznej, dostarczającej opisywany typ, wraz z podstawowymi operacjami arytmetycznymi na nim. A nawet jeżeli nie jest to dopuszczalne, w programie wysyłanym przez SIO2, czy użycie takowej było by już dozwolone w programie pre-generującym odpowiedzi, gdybym postanowił, tak jak pokazano tutaj (https://oij.edu.pl/zawodnik/zadania/samouczek/cpp/) wygenerować wszystkie odpowiedzi na własnej maszynie i zapisać je w formie tablicy w programie docelowym?
Pozdrawiam
Kacper Odzimek
nie ważne już ...przecież jest w g++ __int128... mała pomyłeczka : )