Problem ze zrozumieniem programu


(Jedras121) #1
Sprawdź, czy liczba wymierna p/q jest pierwiastkiem wielomianu anx^n + an-1x^n-1+…+ a1x + a0 o współczynnikach całkowitych. Posłuż się dokładnością eps.

O co chodzi z tą dokładnością. Czy to oznacza liczb miejsc po przecinku liczby p/q??


(etam) #2

Chodzi o to, że oszacowany wynik musi się mieścić w zakresie +/-eps od prawdziwego.


(Jedras121) #3

Dzięki etam. No to się program skomplikował :shock:


([alex]) #4

Dla czego się skomplikował?

double eps=1E-5;abs(fun(x))eps) { /* ok */ } [/code]

(Jedras121) #5

Wybacz [alex], ale nie za bardzo rozumiem twój kawałek kodu :oops:

Jedynym rozwiązaniem jakie mi teraz przychodzi do głowy to jest sprawdzenie w pętli wszystkich liczb -eps < p/q < eps z dokładnością do np. 0.0001?

Czy jest jakieś prostsze rozwiązanie?


([alex]) #6

To co podałem sprawdza: -eps < x < eps , gdzie eps=0.00001

pierwiastek wielomianu


(Pablo_Wawa) #7

Chodzi o to, że licząc wartość funkcji (wielomianu) posługujesz się zaokrągleniami (do iluś tam cyfr po przecinku - skończona reprezentacja liczb rzeczywistych na komputerze), przez co wynik jest obarczony błędem (niedokładnością). Zatem miejsce zerowe wielomianu to takie x, fla którego ten wielomian na wartość 0 (zero). Ale zamiast zera komputer może Ci podać wartość np. 0.00000123. Przy pewnej dokładności obliczeń taki wynik jest dobry, a przy większych jeszcze nie. Stąd jest użyta zmienna eps (epsilon) - która jest jakąś mała liczbą (dodatnią) bliską zeru (np. 0.001 = 1e-3), która symbolizuje dokładność obliczeń (a raczej dokładność sprawdzania warunku na zerowanie wartości wielomianu).

Wartość wielomianu dla danego x (oznaczę w(x)) sprawdzasz czy jest zerem z dokładnością do eps tak jak Ci to podał [alex] - czyli nie przez porównanie z zerem, tylko sprawdzenie, czy wynik (w(x)) jest mniejszy niż dokładność (eps).

To tyle w sprawie formalnej. Sprawdzanie czy liczba wymierna p/q jest pierwiastkiem jakiegoś wielomianu NIE możesz sprawdzać tak jak to napisałeś! To jest bzdura, człowieku! Zakładając, że treść zadania jest taka, jak podałeś. :stuck_out_tongue:

Musisz obliczyć wartość wielomianu mając podane p/q - metod jest kilka, np. schematem Hornera (kolejnych mnożeń). A potem ten wynik porównać do zera (z eps) jak jest wyjaśnione wyżej. :slight_smile:


(Jedras121) #8

A no to teraz all clear. Dzięki wszystkim za pomoc.