Avatar billede nicklasw Nybegynder
11. januar 2006 - 13:52 Der er 28 kommentarer og
1 løsning

langt Decimal tal

Hej.
Først vil jeg lige sige at jeg er helt ny i c++, så det kan godt være at i skal skære det lidt ud i pap.
jeg har lavet et program der kan berenge et tal (PHI)
talet som programmet har beregnet kommer ned i long double preRes.
programmet viser så preRes. men den viser kun 5 decimaler. hvordan gør jeg sådan at jeg kan bestemme hvor mange decimaler den viser.

Med Venlig Hilsen Nicklas

PS: hvis ikke kan forstå mit spørsmål må i lige sige det... så må jeg prøve at skrive det om.
Avatar billede hurra Novice
11. januar 2006 - 14:32 #1
Hvordan gør du det, du kan fx bruge printf() hvor du kan definere hvor mange decimaler du vil se efter .;
  double tpRes = 0.12345678901234567890123456789;
  printf("%.20f", tpRes);
Avatar billede hurra Novice
11. januar 2006 - 14:37 #2
ps: den kan nok ikke skrive alle de decimaler jeg her trykket ind her, mener en double er 160 bit.
Avatar billede nicklasw Nybegynder
11. januar 2006 - 14:43 #3
mener du hvordan jeg jeg beregner phi?
Avatar billede arne_v Ekspert
11. januar 2006 - 14:57 #4
double er kun 64 bit på de fleste compilere
Avatar billede nicklasw Nybegynder
11. januar 2006 - 15:00 #5
hvad med long double

men her er min kode

#include <stdlib.h>
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int gange;
    int teal;
   
    long double lille = 1;
    long double stor = 1;
    long double tabel;
    long double preRes;
    cout << "v\x91lg antal gange koden skal k\x9bre igennem: ";
    cin >> gange;
    for(teal = 0; gange>teal; teal += 1)
    {
   
        preRes = stor / lille;
        cout << preRes << endl;
        tabel = lille + stor;
        lille = stor;
        stor = tabel;
        lille += 1;
        stor += 1;       
    }
    system("PAUSE");
    main();
}
Avatar billede nicklasw Nybegynder
11. januar 2006 - 15:06 #6
kan ikke få.

printf("%.20f", tpRes);

til at virke, den giver et forkert resultat
Avatar billede arne_v Ekspert
11. januar 2006 - 15:08 #7
jeg prøvede lige med 3 compilere: 64, 80 og 96 bit
Avatar billede arne_v Ekspert
11. januar 2006 - 15:12 #8
printf("%20f",x);

svarer til

cout << setw(20) << x;
Avatar billede nicklasw Nybegynder
11. januar 2006 - 15:16 #9
arne_v
skal jeg include noget??
Avatar billede arne_v Ekspert
11. januar 2006 - 15:25 #10
setw kræver

#include <iomanip>
Avatar billede nicklasw Nybegynder
11. januar 2006 - 15:31 #11
øøhh
setw rykker bare talene ud til højre
Avatar billede arne_v Ekspert
11. januar 2006 - 15:37 #12
cout << setw(20) << setprecision(19) << x;

måske så
Avatar billede nicklasw Nybegynder
11. januar 2006 - 15:48 #13
det virkede.
jeg har et andet spørsmål, jeg vil godt hæve poinene.
hvis jeg køre min løkke i igenem mere end 1000 så giver den ikke tal som resultat
men skriver -1.#IND
hvad betyder det
Avatar billede nicklasw Nybegynder
11. januar 2006 - 15:49 #14
undskyld. mere end 10000
Avatar billede nicklasw Nybegynder
11. januar 2006 - 16:03 #15
arne_v men du kan bare lægge et svar
Avatar billede arne_v Ekspert
11. januar 2006 - 16:04 #16
hvordan ser koden ud nu ?

det lyder som om du laver en ulovlig floating point operation
Avatar billede nicklasw Nybegynder
11. januar 2006 - 16:11 #17
#include <stdlib.h>
#include <cstdlib>
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int gange;
    int teal;
   
    int komma;
    double lille = 1;
    double stor = 1;
    double tabel;
    double preRes;
    cout << "v\x91lg antal gange koden skal k\x9bre igennem: ";
    cin >> gange;
    cout << "v\x91lg antal decimaler programmet skal vise: ";
    cin >> komma;
    for(teal = 0; gange>teal; teal += 1)
    {
        preRes = stor / lille;
        cout << setprecision(komma) << preRes << endl;
        tabel = lille + stor;
        lille = stor;
        stor = tabel;
        lille += 1;
        stor += 1;       
    }
    system("PAUSE");
    main();
}
Avatar billede arne_v Ekspert
11. januar 2006 - 16:13 #18
prøv og udskriv stor og lille øverst i for løkken og se hvilke værdier de har når den
går galt
Avatar billede arne_v Ekspert
11. januar 2006 - 16:15 #19
og et svar
Avatar billede nicklasw Nybegynder
11. januar 2006 - 16:49 #20
både stor og lille har en værdi der er 1.#INF når den fejler..
har du en idé hvad det kan være?
Avatar billede arne_v Ekspert
11. januar 2006 - 17:07 #21
1.#INF = uendelig

både stor og lille går mod uendelig

uendeligt divideret med uendeligt er så en lidt sær størrelse
Avatar billede nicklasw Nybegynder
11. januar 2006 - 17:33 #22
james hvordan kan det være den bliver uendeligt... det er et stort tal men ikke uendeligt
Avatar billede arne_v Ekspert
11. januar 2006 - 17:36 #23
doubles har en maximum størrelse

typisk omkring 10^308
Avatar billede nicklasw Nybegynder
11. januar 2006 - 17:56 #24
hvad kan jeg så bruge i stedet på et så langt tal
Avatar billede arne_v Ekspert
11. januar 2006 - 18:13 #25
du skal have fat på en "bignum" pakke
Avatar billede nicklasw Nybegynder
11. januar 2006 - 20:14 #26
skal jeg include noget eller hvordan gør jeg det??
Jeg vil gerne give dig flere poin for det.
Avatar billede arne_v Ekspert
11. januar 2006 - 20:18 #27
du skal først finde en - det er ikke en del af standard C eller standard C++
Avatar billede arne_v Ekspert
11. januar 2006 - 20:19 #28
http://www.swox.com/gmp/

var nok et godt valg
Avatar billede nicklasw Nybegynder
11. januar 2006 - 20:40 #29
tak kigger jeg på
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