Zarejestruj się

Zarejestruj się w naszej społecznościowej wyszukiwarce pytań i odpowiedzi, aby zadawać pytania, odpowiadać na pytania innych i nawiązywać kontakty z innymi ludźmi.

Masz konto? Zaloguj się

Captcha Kliknij obrazek, aby zaktualizować captcha.

Masz konto? Zaloguj się teraz

Zaloguj się

Zaloguj się do naszej społecznościowej wyszukiwarki pytań i odpowiedzi, aby zadawać pytania, odpowiadać na pytania innych i nawiązywać kontakty z innymi ludźmi.

Zarejestruj się tutaj

Captcha Kliknij obrazek, aby zaktualizować captcha.

Zapomniałeś hasła?

Nie mam konta, Zarejestruj się tutaj

Nie pamiętam hasła

Zapomniałeś hasła? Wpisz swój adres e-mail. Otrzymasz link i utworzysz nowe hasło za pośrednictwem poczty elektronicznej.

Captcha Kliknij obrazek, aby zaktualizować captcha.

Masz konto? Zaloguj się teraz

Wpisz swoją nazwę użytkownika.

Proszę wpisać swój adres e-mail.

Wybierz odpowiedni tytuł pytania, aby łatwo można było na nie odpowiedzieć.

Wybierz odpowiednią sekcję, aby łatwo można było wyszukać pytanie.

Proszę wybrać odpowiednie słowa kluczowe Expytanie, ankieta.

Przeglądaj stronę
Wpisz opis dokładnie i szczegółowo.

Wybierz typ wideo.

Tutaj umieść identyfikator wideo: https://www.youtube.com/watch?v=sdUUx5FdySs Przykład: "sdUUx5FdySs".

Proszę krótko wyjaśnić, dlaczego uważasz, że to pytanie powinno zostać zgłoszone.

Proszę krótko wyjaśnić, dlaczego uważasz, że ta odpowiedź powinna zostać zgłoszona.

Proszę krótko wyjaśnić, dlaczego uważasz, że ten użytkownik powinien zostać zgłoszony.

Zaloguj sięRejestracja

Cukor

Cukor Logo Cukor Logo

Cukor Nawigacja

  • Główna
  • O nas
  • Blog
  • Kontakt
  • FAQs
Szukaj na stronie
Zadaj pytanie

Menu mobilne

Zamknij
Zadaj pytanie
  • Główna
  • Tematy
  • Grupy
    • Wszystkie grupy
    • Dodaj grupę
  • Zapytania
    • Nowe pytanie
    • Popularne pytania
    • Najczęściej odwiedzane
    • Gorące pytania
  • Tagi

Zarejestruj się, żeby uzyskać dostęp do pełnej funkcjonalności platformy!

Utwórz nowe konto
Strona główna/Pytania/Q 787
W toku
Mawerik
  • 0
Mawerik
Opublikowane: 21 sierpnia, 20222022-08-21T21:34:59+02:00 2022-08-21T21:34:59+02:00W: Programowanie

Precyzyjny, szybki język programowania?

  • 0

Mam pewien problem. Muszę wykonać 200 miliardów obliczeń z liczbami, które mają 50 miejsc po przecinku i muszą być niezwykle dokładne. Obecnie z zainstalowanym pythonem i mpmath zajęłoby to 35 dni, których nie mam. Zna ktoś jakiś język programowania, który byłby w stanie udźwignąć takie zadanie w stosunkowo krótkim czasie? Same operacje są proste, tylko plus, minus, mnożenie i dzielenie. Dziękuję za pomysły.

mpmatchpython
  • 1 1 Odpowiedź
  • 118 obejrzeń
  • 0
  • 0
Udostępnij
  • Facebook
  • Raport
Zostaw odpowiedź

Zostaw odpowiedź
Anuluj pisanie odpowiedzi

Przeglądaj stronę
Captcha Kliknij obrazek, aby zaktualizować captcha.

1 Odpowiedź

  • Głosowano
  • Najstarszy
  • Ostatnio
  • Losowo
  1. ēdiššu Teacher
    2022-08-22T11:40:19+02:00Dodano odpowiedź na 22 sierpnia, 2022 w 11:40 am

    W systemach komputerowych (SK) do wydajnych obliczeń numerycznych używa się Fortrana. Jest on najszybszy w kontekście macierzowych pozycyjnych systemów numerycznych (array-based numerical codes). Niemniej, w konteście HPC (high-performance computing) niektórzy wolą Julię, która wymaga mniej kodu do wyrażenia tego samego, a szybkością nie odstępuje od tego pierwszego.

    W przypadku Fortrana trzeba użyć zewnętrznych bibliotek, np. MPC, MPFUN/ARPREC/QD/DQFUN. Julia zaś ma już wbudowany typ danych do tego celu.

    Ogólnie rzecz biorąc twój problem jest niejako interdyscyplinarny (wielodziedzinowy) na linii matematyka—informatyka—elektronika. Matematyka bowiem nie jest przekładana wprost w ramy informatyki, a sama informatyka często dopasowuje swe rozwiązania do elektroniki, by cały SK działał efektywnie.

    Czepiając się terminologii należy zauważyć, że zwykle przez precyzyjny język programowania (o ile już pada takie potoczne określenie) mamy na myśli taki język, który potrafi precyzyjnie operować w SK (SK to sprzęt+oprogramowanie, hardware+software, tzn. część trudno zmienialna i część elastyczna traktowane razem). Nie ma to zatem wiele wspólnego z operacjami matematycznymi jako takimi.

    Twój problem, jednakże, polega na tym, że potrzebujesz arytmetyki arbitralnej precyzji (multiple precision, arbitrary precision). 50 miejsc po przecinku to całkiem sporo. Jakkolwiek różnie implementuje się w systemach operacyjnych i językach programowania (JP) obsługę IEEE 754 (standard binarnych operacji na liczbach zmiennoprzecinkowych — floating-point standard), o tyle w praktyce większość JP ogranicza się do 18 cyfr znaczących (double, decimal64) w schemacie x+y=18, gdzie x oznacza cyfry przed przecinkiem, a y cyfry po przecinku. To jest to, co rozumiemy przez „zmienny przecinek” (floating-point), oparty o koncepcję mantysy (mantissa, significand). W C++ mamy nawet typ 'long double’ (quadruple, decimal128) oferujący 34 cyfry znaczące. Nadal za mało.

    Co się zatem robi, gdy chce się mieć operacje arytmetyczne z odgórnie ustaloną precyzją po przecinku (multiple precision)? Trzeba zrezygnować ze wsparcia sprzętu (a konkretnie mikroprocesora — µP, CPU — i jego obsługi standardu IEEE 754 dla natywnego słowa maszynowego) i napisać oprogramowanie, co wnosi tyle, że będzie to zawsze, na mocy definicji, rozwiązanie wolniejsze. Typy float/double w JP są implementowane z myślą o dopasowaniu się do zasady działania µP, dlatego są relatywnie szybkie. Z chwilą, gdy chcemy wykroczyć poza te ograniczone możliwości, musimy zachowywać spójność liczby za pomocą dodatkowego kodu, co przekłada się na większość ilość instrukcji/cykli pracy µP.

    Mamy tylko dwa utarte wzorce dla liczb o ustalonej precyzji: BigInteger oraz BigFloat (Java, Julia), ewentualnie Decimal (Python). Czasem nie ma to swej nazwy, bo możliwość ta jest wbudowana w JP (Common Lisp). W różnych JP są one różnie implementowane, a w niektórych ich po prostu nie ma (C, C++, Fortran).

    Tak czy inaczej, Fortran lub Julia z użyciem wielowątkowości (multithreading) — albo jeszcze lepiej: z użyciem równoległości (parallelism) — powinien dać dobre rezultaty (zakładając, że w twym przedsięwzięciu operacje są od siebie niezależne). Czy to jednakowoż rozwiąże twój problem długiego czasu przetwarzania? Otóż, niekoniecznie. Muszę cię bowiem tutaj, chyba, rozczarować. Jakkolwiek Python jest zgoła wolniejszym językiem od takiego C++, o tyle 35 dni dla 200 miliardów obliczeń wobec liczb z ustaloną precyzją, to jest całkiem dobry wynik dla komputera cyfrowego binarnego, o ile nie dysponujesz mocą obliczeniową superkomputera. Bez względu na wszystko winieneś się przygotować na to, że zajmie to trochę czasu. Dlatego też jakimś rozwiązaniem tego kłopotu jest przeniesienie obliczeń do chmury (cloud computing), np. w ramach AWS. Tyle, że to rozwiązanie na dłuższą metę płatne. Do tego darmowa funkcjonalność zwykle podejmuje politykę zabijania procesów, które zajmują zbyt wiele czasu lub zasobów serwera.

    W praktyce alternatywy do tego, co już masz, mogą okazać się kłopotliwe. C++ wymaga obycia, by zarówno pisać w nim kod wydajny, jak i używać zewnętrznych bibliotek. Skrypty w Wolfram Mathematica, Octave czy Matlabie raczej za wiele nie pomogą, bo opierają się o obliczenia symboliczne (symbolic computing). Co prawda, API Wolframa Alpha mogłoby być jakimś rozwiązaniem, gdyby nie to, że darmowa wersja ogranicza się do 2000 zapytań. Jedynie Julia może być dobrym wyborem, zwłaszcza w przypadku zaprzęgnięcia do obliczeń mocy GPU (procesora graficznego).

    To, co dodatkowo warto by było zrobić, to optymalizacja złożoności obliczeniowej (time complexity) algorytmu, np. za pomocą zredukowania zbędnych operacji poprzez zamianę ich do formy kanonicznej (canonicalization, standardization, normalization). Poza tym, użyj BigInteger zamiast BigFloat tam, gdzie możesz, bo ten pierwszy jest po prostu nieco szybszy. Nie wiem, z czym dokładnie masz do czynienia, niemniej przypominam iż w zagadnieniach łączących matematykę z informatyką nieustępliwym kanonem pozostaje pozycja Donalda E. Knutha „The Art of Computer Programming”, tutaj: Volume 2, 4.3. Multiple-Precision Arithmetic. Twej uwadze polecam w szczególności sekcję 4.3.3. How Fast Can We Multiply?, wskazującą na to, że najlepsze algorytmy mają złożonosć obliczeniową logarytmiczną.

    • 1
    • Reply
    • Udostępnij
      Udostępnij
      • Udostępnij dalej Facebook
      • Udostępnij dalej Twitter
      • Udostępnij dalej LinkedIn
      • Udostępnij dalej WhatsApp
      • Raport

Pasek boczny

Zadaj pytanie

Statystyki

    • Popularna strona
    • Odpowiedzi
    • xkamiii

      Czy to grzech, modlić się do Maryi i świętych, skoro ...

    • Rob

      Dlaczego drożeje cukier?

      • 3 Odpowiedzi
    • Grażynka

      Czy nowych języków obcych można nauczyć się w każdym wieku?

      • 3 Odpowiedzi
    • Emilian Iwanicki
      Emilian Iwanicki dodał odpowiedź A co ty chazarze widzisz złego w Rosji? Uważasz że… 3 listopada, 2022 w 2:16 am
    • Jan
      Jan dodał odpowiedź Chyb ta praca w sposob znaczacy przekracza Twoje mozliwosci. 9 października, 2022 w 5:09 pm
    • maglia italia chiesa
      maglia italia chiesa dodał odpowiedź Hi, everything is going well here and ofcourse every one… 29 września, 2022 w 12:41 pm

    Related Questions

    • Pavel

      Gdzie można znaleźć zdalną pracę dla programistów?

      • 2 Odpowiedzi
    • Lolek

      Czy trzeba iść na studia żeby zostać programistą?

      • 3 Odpowiedzi
    • Grzybek

      Jaki język programowania wybrać?

      • 1 Odpowiedź

    Najlepsi członkowie

    ēdiššu

    ēdiššu

    • 0
    • 65
    Teacher
    Cukor

    Cukor

    • 0
    • 45
    Begginer
    Melancholik

    Melancholik

    • 0
    • 32 Punkty
    Begginer

    Najpopularniejsze Tagi

    atlantyda balkon dywersyfikacja dziecko ewolucja inwestycje java java script jedzenie katastrofa klocki mpmatch nocnik norweski obligacje opony polityka praca programowanie python srebro

    Odwiedź stronę

    • Główna
    • Tematy
    • Grupy
      • Wszystkie grupy
      • Dodaj grupę
    • Zapytania
      • Nowe pytanie
      • Popularne pytania
      • Najczęściej odwiedzane
      • Gorące pytania
    • Tagi

    Stopka

    Cukor

    Portal cukor.pl - miejsce, w którym pomagasz innym i sam otrzymujesz pomoc. Właśnie tutaj masz możliwość zadawania pytań i odpowiadania na pytania innych. Wiedza, doświadczenie i wsparcie użytkowników przeplatają się ze sobą i gromadzą na tej stronie internetowej. A wszystko po to, aby pomóc uzyskiwać odpowiedzi na nurtujące pytania. Kluczowym elementem i celem portalu jest wiedza, a dokładniej dzielenie się wiedzą.

    O nas

    • Blog
    • O nas
    • Kontakt

    Kwestie prawne

    • Polityka prywatności

    Pomoc

    • Baza wiedzy

    Sieci społecznościowe

    © 2022 Cukor. All Rights Reserved
    With Love by Popio

    Wstaw/edytuj odnośnik

    Wpisz docelowy adres URL

    Lub dodaj odnośnik do istniejącej treści

      Nie wprowadzono kryteriów wyszukiwania. Wyświetlane są najnowsze pozycje. Wyszukaj elementy lub użyj klawiszy strzałek w górę i w dół, aby je wybrać.