Avatar billede acid-head Nybegynder
18. marts 2002 - 23:29 Der er 17 kommentarer og
4 løsninger

Pi?

Hvilken variabel-type skal når den skal indeholde den "fulde Pi" ??

3.141592654

eller

3.1415926535897932384626433832795

- Den først er noget kortere end den anden, men der er vist også rimelig præcis... Mere præcis end 3.14! =)
Avatar billede chries Nybegynder
18. marts 2002 - 23:31 #1
den første kan vist klares af float, den sidste skal ned i en double (den lange).
Avatar billede ducks Nybegynder
18. marts 2002 - 23:32 #2
den fulde pi fylder en bog på over 500 sider ;)
Avatar billede ducks Nybegynder
18. marts 2002 - 23:32 #3
ok jeg har måske misforstået noget :)
Avatar billede jonas- Nybegynder
18. marts 2002 - 23:34 #4
ducks: Pi kan ikke defineres 100% præcist. - Der vil altid kunne puttes flere decimaler på, derfor kan du ikke sige at det fylder en bog på 500 sider.
Avatar billede chries Nybegynder
18. marts 2002 - 23:35 #5
men hvis du ikke anvender doubles hele vejen igennem, giver det ingen mening at bruge den lange version. der vil alligevel opstå unøjagtiger pga trunkeringer og en float's manglende evne til at ramme nogle værdier. De extra "værdi'er" du ville have på pi forsvinder ind i unøjagtigen.
Avatar billede acid-head Nybegynder
18. marts 2002 - 23:35 #6
ducks...> Okay =) - Jeg synes nu de her er gode nok! =)
Avatar billede acid-head Nybegynder
18. marts 2002 - 23:37 #7
Chries -> Hmm... Dvs at man faktisk ikke kan lave en formel med Pi, og så få det helt korrekte resultat ;(
Avatar billede ducks Nybegynder
18. marts 2002 - 23:40 #8
acid-head: måske kunne man med et program der kunne skrive en uendelig kode, ellers er der vel ikke nogen muligheder (hvis det da er en mulighed)
Avatar billede darkwolfie Nybegynder
19. marts 2002 - 00:12 #9
Den største pi jeg har hørt om... var på 7.500.000 decimaler.
Avatar billede jonas- Nybegynder
19. marts 2002 - 00:14 #10
darkwolfie: Skal vi ikke lave en der er større? :o)
Avatar billede djernaes Nybegynder
19. marts 2002 - 07:27 #11
Du kan sagtens beregne pi, formlen er "frit tilgængeligt". Problemet er bare at der ikke er nogen gentagelse i mønsteret af decimaler og at man derfor altid kan regne det næste decimal ud. Lidt efter samme princip som at man altid kan dele et stykke i to, hvor efter man har to stykker - der kan deles i to, ....

Martin
Avatar billede borrisholt Novice
19. marts 2002 - 07:49 #12
jeg har endda noget kode der kan .... Jeg er ikke 100% sikker på jeg kan finde mit C++ kode, men ellers så worse case så har jeg noger Delphi kode (Det kan NEMT protes)...

Jens B
Avatar billede professoren Nybegynder
19. marts 2002 - 17:54 #13
det er nok en double(float), og på en 64-bit maskine, er den temmelig lang!
Avatar billede acid-head Nybegynder
20. marts 2002 - 00:02 #14
Det er altsammen fint nok, men det jeg lever efter er bare hvilken variabel-type jeg skal bruge, for at regne med en rimelig præcis Pi... =) - Det har jeg fået nogle bud på, men jeg lader spørgsmålet stå åben, for lidt diskution... =)
Avatar billede acid-head Nybegynder
20. marts 2002 - 00:03 #15
Borrisholt -> Jeg vil da alligevel meget gerne se koden... =) Bruger også selv lidt Delphi, så bare kom med det... :)
Avatar billede borrisholt Novice
20. marts 2002 - 07:20 #16
jeg fandt mit c++ kode .. Det har været offenligjort i et gammelt spm :
http://www.eksperten.dk/spm/79195

Vil du syadig have delphi koden ?

Jens B
Avatar billede borrisholt Novice
20. marts 2002 - 09:20 #17
problemet er ikke at beregne pi relativ nøjagtigt .. problemer er at regne med den ....
Hvvis du bruger en float til at 2gemme" dine beregninger i .. Så skal du gemme pi i en float etc ...

Jens B
Avatar billede chries Nybegynder
20. marts 2002 - 09:36 #18
hvis du anvender float i dine beregninger, nytter det ikke at anvende PI mest præsis, så kan du lige så godt smide den i en float med en 3-5 decimaler.

i følgende program burde a og b være ens, men det er de ikke, da en float ikke kan ramme hver eneste værdi i dens range :-)

// TestMe.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream.h"

int main(int argc, char* argv[])
{
    float a = 0.0f;
    float b = 0.0f;

    for( int i=1; i<10000; i++ )
    {
        a += 0.1f;
        b = 0.1f * i;

        cout << "a: " << a << ", b: " << b << endl;
    }
}

a: 178.202, b: 178.2
a: 178.302, b: 178.3
a: 178.402, b: 178.4
a: 178.502, b: 178.5
a: 178.602, b: 178.6
a: 178.702, b: 178.7
a: 178.802, b: 178.8
a: 178.902, b: 178.9
a: 179.002, b: 179
a: 179.102, b: 179.1
a: 179.202, b: 179.2
a: 179.302, b: 179.3
a: 179.402, b: 179.4
a: 179.502, b: 179.5
a: 179.602, b: 179.6

så hvis du vil anvende pi _meget_ præsis, skal du enten beregne via heltals metoder eller anvende double hele vejen igennem.
Avatar billede acid-head Nybegynder
21. marts 2002 - 13:34 #19
Hej igen... Jeg har efterhånden fundet ud af, hvordan jeg skal bruge regne med Pi, og jeg har fået en del gode svar... Tak for det... =)

- Cries -> Vil du ikke have nogle point? ;)
Avatar billede chries Nybegynder
21. marts 2002 - 14:04 #20
Vil da gerne have et par af dem :-)
Avatar billede acid-head Nybegynder
21. marts 2002 - 18:00 #21
Hej allesammen... =)

- Jeg har smidt lidt flere point i spørsmålet, da det egentlig blev længere end jeg havde troet... =) Men tusinde tak for hjælpen... =)

//AciD~HeaD
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester