2009-07-27 8 views
8

Ciekawi mnie nieskończona liczba komputerów, w szczególności pi.Pi/Infinite Numbers

Aby komputer mógł renderować okrąg, musiałby rozumieć pi. Ale jak to możliwe, jeśli jest nieskończona?

Czy za dużo w tym szukam? Czy po prostu użyłby zaokrąglonej wartości?

+9

Właściwie to nie używałby wartości Pi do rysowania kółek w ogóle. Równanie opisujące koło to 'x^2 + y^2 = R^2' - bez wzmianki o Pi, jak widać. Aby uzyskać więcej informacji na temat tego, jak jest to skutecznie realizowane, zobacz http://en.wikipedia.org/wiki/Midpoint_circle_algorithm –

+3

Przy okazji, pi nie jest nieskończony. Właściwe słowo to "nie kończące się" (myślę). –

+11

Słowo, które chcesz, jest transcendentalne. Medytujcie nad tym. –

Odpowiedz

15

Matematycznie, komputery są zarówno skończone, jak i nieciągłe i dlatego nie mogą całkowicie poznać PI, ani poprawnie renderować koła.

Jednak w rzeczywistości cyfrowej żadne z nich nie istnieje, więc wystarczy zbliżyć się do PI, a następnie użyć tego do przybliżonego renderowania okręgu, dając dokładnie takie same piksele, które i tak zostałyby obliczone z dokładnego PI.

Tak czy inaczej, otrzymane piksele nie są również kręgi, ponieważ są skończoną kolekcją punktów cyfrowych, a okrąg to krzywa złożona z nieskończonej liczby punktów, w większości o wartościach nieracjonalnych.

(Podkreślono mi, że PI nie jest zwykle używana do wykreślania okręgu, co jest prawdą, jednak metody użyte do wykreślenia okręgu odnoszą się do formuł używanych do wyrażania i/lub obliczania wartości PI, które wciąż mają te same problemy).

+0

Chciałbym wiedzieć, po co losuje się losowanie w dół? Jeśli coś jest nie tak z moją odpowiedzią, proszę powiedz mi. Ale AFAIK, to jest dokładnie poprawna, zarówno matematyczna, jak i wrtowa teoria obliczeń. – RBarryYoung

+1

+1 Logika działa tam, gdzie nie udaje się matematyka. – WolfmanDragon

+1

Rzeczywiście, jest to doskonałe wyjaśnienie wysokiego poziomu. To, co sprawia, że ​​jest tak dobra, to fakt, że nie odnosi się tylko do kręgów, ale jest skuteczny i uniwersalny. –

7

Podanie przybliżone jest na ogół wystarczające. Aby "renderować" okrąg, komputer musi jedynie rozumieć pi na tyle dobrze, aby był dokładnie renderowany w jakiejkolwiek rozdzielczości (skończonej).

Edycja: jak zauważyli inni, do renderowania okręgu nie potrzeba nawet pi. Mimo to sedno pytania brzmiało: "jak komputery radzą sobie z liczbami takimi jak pi?" Używają przybliżenia, a ktokolwiek używa tych przybliżeń, musi zdecydować, czy są one wystarczająco precyzyjne dla danego celu.

+0

Aby renderować okrąg, zwykle nie używamy w ogóle pi. – Nosredna

2

Komputery używają jedynie dobrego przybliżenia liczby pi.

Z artykułu MSDN w sprawie System.Math.PI

Wartość tego pola jest +3,14159265358979323846.

BTW: PI NIE jest nieskończona. Jest nieracjonalny, co oznacza, że ​​ma nieskończoną liczbę nie powtarzających się miejsc dziesiętnych. Istnieje kilka wyrażeń dla PI, które są bardzo krótkie. (Patrz Wikipedia page więcej szczegółów)

Tu jest cudownie krótkie wyrażenie PI:

PI as Integral

+0

PI nie ma powtarzających się wzorów dziesiętnych, ponieważ jest transcendentalny, co oznacza, że ​​nie tylko jest nieracjonalny (nie może być wyrażony jako ułamek dwóch liczb całkowitych), ale także nie jest algebraiczny (nie jest rozwiązaniem żadnego racjonalnego równania wielomianowego) . – spatz

+0

Nie powtarzam. Ma nieskończoną liczbę * niezerowych * cyfr dziesiętnych, ale one się nie powtarzają. (Zobacz komentarze do pytania na temat debaty na temat tego, co tak naprawdę nazywa się) –

+0

doh! pisanie "powtarzania" było całkowitą literówką. Naprawiono teraz jako "nie powtarzający się". – abelenky

1

wierzę, że zaokrągla go do bardzo niewielkiej liczbie, i to najprawdopodobniej stała. Jeśli używasz PHP, to w jaki sposób PI renderuje:

 
echo pi(); // 3.1415926535898 
echo M_PI; // 3.1415926535898 

Podobnie jak trzeba tylko 3.14159 w liceum, komputery tylko tyle potrzeba, aby to dość dokładne.

+0

17 cyfr dziesiętnych dotyczy wszystkiego, co możesz reprezentować. –

1

Komputery używają właśnie zaokrąglonych wartości pi, o ile nie ma oczywiście specjalnego przypadku, takiego jak obliczenia naukowe. Na przykład, w python pi jest reprezentowany jako:

>>> import math 
>>> math.pi 
3.1415926535897931 

Można to sprawdzić dla siebie w stanie spoczynku, pytony interaktywny interpreter.

+0

Interesujące: C# zgłasza wartość jako 3.14159265358979323846. Zwróć uwagę na cyfry: 97931 vs. 97932 To wygląda mi na coś więcej niż błąd zaokrąglania. – abelenky

+0

Tylko około 17 cyfr jest znaczących. Ostatnia cyfra to niewiele więcej niż hałas pochodzący z algorytmu konwersji binarnej na dziesiętną platformy. –

1

Przybliżenie jest często "wystarczająco dobre", niezależnie od tego, czy otrzymujesz je za pomocą metody z this site lub another one.

"Renderowanie" to już inna sprawa. Kiedy masz skończoną rozdzielczość ekranu, idealna wartość π nie ma znaczenia.

AKTUALIZACJA: Obliczenia mogą być inną sprawą, inną niż renderowanie. Niektóre aplikacje mogą wymagać większej precyzji niż standardowe podwójne. To zależy od problemu.

2

Języki programowania używają zaokrąglonej stałej dla pi i podobnych liczb "nieskończonych".

Aby uzyskać wyższą precyzję, należy użyć iteracyjnych algorytmów zapętlanych tak długo, jak to jest wymagane.

+0

A to - nie rysowanie kół - było istotą tego pytania. – HenryRootTwo

5

Nie potrzebujesz wcale PI do narysowania okręgu. Istnieje wiele sposobów na narysowanie koła. Naiwna droga to sinus i cosinus.

Algorytm, który widziałem najczęściej na maszynach 8-bitowych, to Bresenham's circle. Do tego nie potrzebujesz nawet matematyki zmiennoprzecinkowej.

+0

Sin() i Cos() są zwykle obliczane za pomocą PI lub z ** e ** lub z tabel wartości, które same zostały obliczone przy użyciu jednego z nich. Tak, są sposoby, ale najprostsze metody zwykle używają PI. – RBarryYoung

+0

Sinus i cosinus są powiązane z liczbami e, pi i urojonymi, ale nie zgadzam się z tym, że to jest typowe, że są one obliczane na podstawie dowolnego z nich lub z tabel reprezentujących te. Powiedziałbym, że typowe dla Sine i Cosine są obliczane przez rozszerzenie serii, które szybko się konwerguje. Ale język C nie mówi, jak należy je obliczyć. Możesz znaleźć rozszerzenia Taylora, które obliczają okrągłe funkcje bez odniesienia do pi lub e.Chociaż, jak już powiedziałem, wszystkie te podmioty są ze sobą powiązane. – Nosredna

+0

Moje przeprosiny, masz rację Nosredna. Z mojego punktu widzenia zdaje się, że zapomniałem, jak powstają Taylor series i in. – RBarryYoung

2

Gdzieś widziałem dowód, że aby narysować okrąg wokół wszechświata z milimetrową dokładnością, że trzeba mniej niż 100 cyfr liczby pi, innymi słowy, daleko mniej cyfr niż zostało obliczonych przez ludzi z zbyt dużą ilością czasu na ręce (lub zbyt dużą moc obliczeniową ...). Teraz, gdybym tylko mógł znaleźć ten dowód ... (edycja) found it

+0

Tak, ale co, jeśli chcesz to antialias? – Nosredna

Powiązane problemy