• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] duża liczba float na str/int

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
94 wizyt
pytanie zadane 1 kwietnia 2022 w C i C++ przez Krzysztofs1234 Użytkownik (890 p.)
Dzień dobry,

szukałem na tym forum (i nie tylko) odpowiedzi na podobne pytania, ale wciąż nie mogę rozwiązać swojego problemu. W C++ chcę operować dużymi liczbami i muszę np. mieć 26^16 lub dużo większe. To już jest ponad 20 cyfr. Zapisać jej nie mogę, bo nawet unsigned long long nie wystarcza. Chciałem wynik potęgowania zapisać jako tekst, ale to_string od jakiejś wielkości przekłamuje wyniki. Później chciałbym wyznaczyć resztę z dzielenia tej liczby przez jakąś liczbę pierwszą, która zmieściłaby się w unsigned short, ale wpierw potrzebuję wyniku potęgowania z dokładnością do jedności. W ostateczności chyba dałoby się ją uzyskać za pomocą arytmetyki modularnej: https://pl.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/modular-multiplication

Jednak zamiast potęgowania musiałbym mnożyć tyle razy, ile wynosi wykładnik i za każdym razem wyciągać resztę, i jeszcze raz ją wyliczyć na końcu.

Proszę o pomoc.

1 odpowiedź

+1 głos
odpowiedź 1 kwietnia 2022 przez adrian17 Ekspert (334,700 p.)
Jeśli cały wzór masz zdefiniowany jako arytmetykę modulo, to to nie jest "w ostateczności" - to jest normalny sposób robienia tego. Nie potrzebujesz bigintów w ogóle. Jeśli Twoim zastosowaniem jest kryptografia to też daj znać :P

A jeśli jesteś pewny że potrzebujesz, to np boost::multiprecision ma liczby całkowite dowolnej wielkości, na przykład: https://www.boost.org/doc/libs/1_72_0/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html
komentarz 1 kwietnia 2022 przez Krzysztofs1234 Użytkownik (890 p.)
edycja 1 kwietnia 2022 przez Krzysztofs1234
Cześć. Dzięki za odpowiedź. Moim zastosowaniem jest funkcja haszująca do algorytmu Karpa-Rabina. https://eduinf.waw.pl/inf/alg/001_search/0052.php

W przykładzie alfabet ma 3 znaki, a długość okna do wzorca to 5. Jeśli alfabetem byłoby chociaż pół tablicy ASCII i wzorzec miałby tych znaków ponad 20, no to naprawdę mogłyby powychodzić duże liczby. Właśnie kombinuję ze schematem Hornera, ale obawiam się, że mogą być problemy z uaktualnianiem hasza tekstowego.

Podobne pytania

0 głosów
3 odpowiedzi 319 wizyt
pytanie zadane 29 marca 2016 w C i C++ przez Proszek73 Obywatel (1,140 p.)
0 głosów
3 odpowiedzi 429 wizyt
0 głosów
1 odpowiedź 600 wizyt
pytanie zadane 12 kwietnia 2016 w C i C++ przez zkkf56 Dyskutant (8,710 p.)

91,837 zapytań

140,513 odpowiedzi

317,019 komentarzy

61,163 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...