Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Long long double za male i GMP

Ostatnio zmodyfikowano 2016-10-03 22:02
Autor Wiadomość
maks2002
Temat założony przez niniejszego użytkownika
Long long double za male i GMP
» 2016-09-07 23:48:39
Witam serdecznie.
Jak w temacie- mam problem z oblicznaniem liczb powyżej kilkunastocyfrowych^3 i wyższych. Wychodzi mi błędny wynik. Próbowałem nawet w mathlabie, ale niestety, (chyba jadą na jednym oprogramowaniu). Sprawdzałem na jednej operacji liczenia- jest błędna. Czy ktoś jest w stanie podać mi jakaś inna bibliotekę, lub podać jakiś program który będzie obliczał takie liczby poprawnie? Problemem nie jest użycie pamięci- jest małe, program sam się "zeruje" po pętli. Proszę o podpowiedź.
P-151537
darko202
» 2016-09-08 08:41:51
Pewnie są jakieś biblioteki, ale trzeba zastosować prosty algorytm mnożenia pisemnego
https://www.medianauka.pl​/mnozenie_pisemne

liczby zapamiętujesz w jakimś kontenerze (np. tablica, wektor,...)
piszesz własną funkcję mnożącą takie 2 elementy
podobnie do przedstawionego rozwiązania na
https://www.matematyka.pl​/270752.htm

z opisu wynika,  że musisz poszukać lepszego kodu od tam przedstawionego,
ale idea jest podobna


oczywiście jeśli to za mało to zastosuj algorytm mnożenia lepszy pod względem złożoności obliczeniowej
np.
https://pl.wikipedia.org/wiki​/Algorytm_Karacuby

ale to już chyba przesada bo odpowiednio zaiplementowany prosty algorytm mnożenia pisemnego
jest dostatecznie szybki do rozwiązań szkolnych
P-151542
mateczek
» 2016-09-08 09:12:05
jeśli interesuje Cię c++
to masz gmp i boost Pod linuxem skorzystanie z tej biblioteki jest banalnie proste
https://www.youtube.com/watch​?v=Mr6yAf9XpE0

Pod windowsem będziesz musiał się trochę pomęczyć.

Pytanie czy chcesz robić obliczenia na intach ?? czy na liczbach rzeczywistych?? To pierwsze lepiej. Bo arytmetyka zmienno przecinkowa to zawsze przybliżenia. Jeśli zadeklarujesz długość mantysy na 3 cyfry to obliczenie 44*33= stracisz ostatnią cyfrę Co chcesz robić z wielkimi liczbami jakie obliczenia??
P-151544
maks2002
Temat założony przez niniejszego użytkownika
» 2016-09-08 15:26:58
Niestety, samo mnożenie już wykazuje błędy, a więc nie wchodzi w grę odp od Darko202.
Oczywiście, działam na int, Jednak wynik musi zostać spierwiastkowany, wtedy wchodzą real.
A macie coś jeszcze oprócz biblioteki boots?
P-151552
darko202
» 2016-09-08 16:24:11
a co chcesz naprawdę zrobić ?
tzn.
opisz kolejne operacje jakie musisz wykonać
i pokaż przykład choć 1 liczby którą chcesz obliczyć

nie wyobrażam sobie co może oznaczać "samo mnożenie już wykazuje błędy"
algorytm prostego mnożenia sposobem pisemnym zawsze działa.

realizowałem go przy liczeniu dużych silni np. oblicz 1000000!
w sposób wcześniej zaproponowany i był szybki, choć widziałem, że można to zrobić jeszcze szybciej.

algorytm pierwiastkowania opisany na
np.
http:/​/pl.sci.matematyka.narkive.com​/fZTY9XVt​/algorytm-pierwiastkowania
też wygląda na prosty

pierwiastkowanie to funkcja odwrotna do potęgowania - a to wielokrotne mnożenie
 
z czym masz problem ?


P-151554
mateczek
» 2016-09-08 16:42:39
gmp biblioteka jeśli ci nie działa to wklej kod z oczekiwanym wynikiem szukasz liczb pierwszych?? pierwiastkowanie wystarczy z wynikiem zaokrąglonym do int
P-151556
maks2002
Temat założony przez niniejszego użytkownika
» 2016-09-08 16:50:28
Może i liczy, mi tez liczy. Ale niepoprawnie. Np: liczba 1234567891011 ^3 (oczywiście x*x*x) daje wynik:13227051169280585435. Pytanie: dlaczego na końcu tego jest 5? przecież jak końcówka jest 1 to musi być w wyniku 1- chyba że się mylę....

Akurat nie liczb pirwszych- próbuję się z Feramatem ;)
blisko było: 1321837206775723^(1/3)-1 =718336124103879^(1/3)+603501082671843^(1/3)
P-151557
mateczek
» 2016-09-08 17:18:53
C/C++
#include<iostream>
#include <gmpxx.h>
using namespace std;

int main()
{
    mpz_class a, c;
   
    a = "1234567891011";
    c = a * a * a;
    cout << c;
   
    return 0;
}

wynik=1881676376411925699615487319217434331
P-151558
« 1 » 2 3 4
  Strona 1 z 4 Następna strona