[Pascal] Jak pierwiastkować liczby wychodzące ponad real?

0

Muszę dokonać pierwiastkowania dużych liczb w Pascalu. Niestety, sqrt w Pascalu działa tylko dla typu Real (tj. 11-12 cyfr), a ja potrzebuję tej funkcji do liczb nawet 15-cyfrowych. Jak to rozwiązać?

0

Wydaje mi się, że musisz tu już posłużyć się algorytmem Newton'a lub szukaniem przez potęgowanie.

Zobacz: http://www.i-lo.tarnow.pl/edu/inf/alg/zmzf/pages/004.htm

0

nie wiem czy tak jest ale mozesz sprobowac: (nie wiem czy są w Pascalu double :P ale użyj największego z dostępnych)

function Pierw(Podst:double;Sto:integer):double;
begin
  result:= exp( ln(abs(Podst))*(1/Sto));
end;
0

Cóż.. Real w Pascal/Delphi to to samo co Double (w tych językach oba występują, ale we współczesnych wersjach kompilatorów to synonimy). Największym formatem jest Extended (10 bajtów), ale to format wewnętrzny FPU, więc i tak funkcje obliczeniowe są dostepne maksymalnie dla Real.

Jak chcesz mieć większy zakres to musisz przejść po prostu od wyliczania do wyznaczania metodami algorytmicznymi.

0
Szczawik napisał(a)

Największym formatem jest Extended (10 bajtów), ale to format wewnętrzny FPU, więc i tak funkcje obliczeniowe są dostepne maksymalnie dla Real.
Eee tam, sprawdzałeś? Extended ma większą precyzję niż double, a że to natywny format danych dla fpu to zupełnie inna sprawa.

0

Polecam sprawdzić osobiście, że dane Extended przy operacjach innych niż dodawanie i odjemowanie oraz obliczenia FPU na BCD lub Integer są na Extended i Double wykonywane tak samo, z tym, że Extended zajmuje więcej, bo w pozostałych przypadkach FPU ignoruje pozostałe pozycje wpisywane do FPU i wykorzystuje je tylko dla większej dokładności obliczeń wewnętrznych.

Taka jest przynajmniej teoria. [Wzięte z dokumentacji Intela dla FPU w procesorach rodziny Pentium.]

// ok, wierzę na słowo - kolejny bezsens w architekturze procesorów intela - Ł

1 użytkowników online, w tym zalogowanych: 0, gości: 1