1 / 3
Mar 2016

Witam!

Mam już ogarnięte BigInt oraz fraction - słowem radzę sobie z liczbami typu x = 999...9 oraz y = 999...9 / 777...7. Dla 100 iteracji odpowiedniego rozwinięcia funkcji arcsin w szereg otrzymuję już nawet przybliżenie pi niezłej jakości (ściślej: dokładności) :wink:

1336060954842022772141836994920280925179635832906872158893597006377876010446156926304192290763208659489986903952869788796742354510290880955930350375674899149159771029170688888910469508550040366847427085089296 / 425281410470370956715678369238881624325558057985721365965218552960975045592285427369451439526465444634813495121827309479437786367694479218273549346900464744507508279786874450467066951307792525339974959104000

Teraz chciałbym to przerobić na ułamki dziesiętne. Z kilku powodów: http://pl.spoj.com/problems/PI/14 i tym podobne oraz ciekawość czysto naukowa. Tu jednak mam spore problemy. Podstawowe, elementarne intuicje dotyczące liczb fl (floating point) i fi (fixed point) posiadam. Moje pytania są następujące:

  1. Co wybrać? Prostsze rozwiązanie stałoprzecinkowe czy trudniejsze do zaprogramowania rozwiązanie zmiennoprzecinkowe?
  2. Jeżeli bardziej profesjonalne jest drugie podejście, to w jaki sposób się za nie zabrać? Czy powinienem przestrzegać stanardów w rodzaju IEEE 754?
  3. Sporo osób bawi się w BigInt. Nawet na SPOJu nie brakuje zadań z tego zakresu. Dlaczego nikt nie robi tego z BigDouble?

Będę wdzięczny za wszystko: odpowiedzi, podpowiedzi, linki i tak dalej. Materiał znaleziony przeze mnie jest bardzo rozdrobniony a nie wierzę, by na studiach informatycznych pomijano to zagadnienie. Każda wskazówka będzie dla mnie cenna.

  • created

    Mar '16
  • last reply

    Jul '16
  • 2

    replies

  • 1.1k

    views

  • 2

    users

  • 1

    like

  • 3

    links

3 months later

Dałem Ci like, bo twoje pytanie, w końcu to nie "tradycyjne" pytanie w rodzaju :wink::

A u mnie działa, dlaczego na spoju dostaję WA?

Co do BigIntów i BigDouble, są, są, ale nie koniecznie w standarcie, więc tylko dla liczenia pi nie warto wymyślać na nowo koła. Swoją drogą, do obliczania kolejnych cyferek pi, nie trzeba BIGdouble, jest inna metoda.
Napisałem, że nie w standarcie, ale miałem na myśli nie w standarcie c/c++
Co innego inne języki programowania, np haskell. Poniżej wydruk ekranu z ghci [shell haskela]:

Prelude> 1336060954842022772141836994920280925179635832906872158893597006377876010446156926304192290763208659489986903952869788796742354510290880955930350375674899149159771029170688888910469508550040366847427085089296 / 425281410470370956715678369238881624325558057985721365965218552960975045592285427369451439526465444634813495121827309479437786367694479218273549346900464744507508279786874450467066951307792525339974959104000
3.141592653589793
Prelude> pi
3.141592653589793
Prelude>

Czytając "Algorytmy, almanach", znalazłem link:
David Goldberg: What every computer scientist should know about floating-point arithmetic. „ACM
Computing Surveys” 1991, 23, 1, s. 5 – 48, http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html4
A całość: http://docs.oracle.com/cd/E19957-01/806-3568/ncgTOC.html5
Może CI to cokolwiek pomoże-skorzystasz?

Ooo... od dłuższego czasu nie sądziłem, że ktoś mi odpisze :slight_smile:

Dziękuję za like i skorzystam na pewno :slight_smile: Aczkolwiek nie w najbliższym czasie - jest tyle innych fascynujących problemów na SPOJu i nie tylko... :wink:

Raz jeszcze dzięki!

Suggested Topics

Want to read more? Browse other topics in Tutoriale, poradniki or view latest topics.