/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
c++, long?
Fra : Martin


Dato : 28-07-04 20:03

Et program skal regne med op til 10 i ellevte potens og det kniber når vi
når den syvende/ottende potens. Så kan den ikke regne med længere. Jeg havde
en alm. float til start og har nu en long. Double går vistnok ikke så godt.
Hvad kan jeg gøre?

Mvh.
Martin



 
 
Mogens Hansen (28-07-2004)
Kommentar
Fra : Mogens Hansen


Dato : 28-07-04 20:53


"Martin" <mf_NO_Spima@digginet.dk> wrote:

> Et program skal regne med op til 10 i ellevte potens og det kniber når vi
> når den syvende/ottende potens. Så kan den ikke regne med længere. Jeg
havde
> en alm. float til start og har nu en long. Double går vistnok ikke så
godt.
> Hvad kan jeg gøre?

Jeg går ud fra at det er heltalsberegninger.

Du skal bruge mindst 37 bit til at repræsentere 1E11.

Har din compiler en 64 bit integer ?
Det kan enten være fordi det er en 64 bit platform hvor int kan være 64 bit
eller fordi den har en (compiler specifik) sprog udvidelse, som f.eks. "long
long"/"unsigned long long" eller "__int64".

Bemærk at "long long" er en del af C99 og dermed en sandsynlig del af C++ i
fremtiden.

Hvis din compiler ikke direkte understøtter 64 bit integerer kan man bare
lave sådan en type.
Det er formodentlig muligt at finde sådan en klasse et eller andet sted på
nettet.


Venlig hilsen

Mogens Hansen



Martin (28-07-2004)
Kommentar
Fra : Martin


Dato : 28-07-04 23:39



"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:ce90bq$1n7p$1@news.cybercity.dk...
>
> "Martin" <mf_NO_Spima@digginet.dk> wrote:
>
> > Et program skal regne med op til 10 i ellevte potens og det kniber når
vi
> > når den syvende/ottende potens. Så kan den ikke regne med længere. Jeg
> havde
> > en alm. float til start og har nu en long. Double går vistnok ikke så
> godt.
> > Hvad kan jeg gøre?
>
> Jeg går ud fra at det er heltalsberegninger.
>
> Du skal bruge mindst 37 bit til at repræsentere 1E11.
>
> Har din compiler en 64 bit integer ?
> Det kan enten være fordi det er en 64 bit platform hvor int kan være 64
bit
> eller fordi den har en (compiler specifik) sprog udvidelse, som f.eks.
"long
> long"/"unsigned long long" eller "__int64".
>
> Bemærk at "long long" er en del af C99 og dermed en sandsynlig del af C++
i
> fremtiden.
>
> Hvis din compiler ikke direkte understøtter 64 bit integerer kan man bare
> lave sådan en type.
> Det er formodentlig muligt at finde sådan en klasse et eller andet sted på
> nettet.
>
>
> Venlig hilsen
>
> Mogens Hansen
>
Det er en TurboC++ version 3.0 hvis det hælper?
Mvh.
Martin



Mogens Hansen (29-07-2004)
Kommentar
Fra : Mogens Hansen


Dato : 29-07-04 20:31


"Martin" <mf_NO_Spima@digginet.dk> wrote:

[8<8<8<]
> Det er en TurboC++ version 3.0 hvis det hælper?

Det hjælper ikke - så vidt jeg husker har den ikke nogne 64 bit data heltal
type.
Du skal finde eller skrive en klasse.

Som Bertel Brander tidligere har været inde på kunne det være en god ide at
benytte en mere tidsvarende compiler.

Venlig hilsen

Mogens Hansen



Bertel Brander (29-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 29-07-04 23:31

Martin wrote:

> Det er en TurboC++ version 3.0 hvis det hælper?

Der findes et stort antal big-number biblioteker på nettet,
f.ex. denne:

http://www.uic.nnov.ru/~zny/arageli/

Den ser ud til at kunne oversætte med ældre versioner af
Turbo/BorlandC++, du bør bruge den version der ikke bruger
assembler, det er vist størst chance for at den vil virke.

/b

Jacob Jensen (19-08-2004)
Kommentar
Fra : Jacob Jensen


Dato : 19-08-04 19:52

> Et program skal regne med op til 10 i ellevte potens og det kniber når vi
> når den syvende/ottende potens. Så kan den ikke regne med længere. Jeg
> havde
> en alm. float til start og har nu en long. Double går vistnok ikke så
> godt.
> Hvad kan jeg gøre?

Jeg har lavet et lille testprogram. Det viser at du sagtens kan bruge både
float og double til at repræsentere 10^11. Jeg laver fire variabler og
sætter dem til den største værdi de kan have (sådan ca.) og skriver den ud
igen for at se om det gik godt. "int" og "long" er ens på min maskine. Hvad
er output fra dette program hos dig?

#include <iostream>
using namespace std;

int main()
{
cout << "size of unsigned int is " << sizeof(int) << " bytes" << endl;
cout << "size of unsigned long is " << sizeof(long) << " bytes" << endl;
cout << "size of float is " << sizeof(float) << " bytes" << endl;
cout << "size of double is " << sizeof(double) << " bytes" << endl;

unsigned int tal1 = 4294967295;
unsigned long tal2 = 4294967295;
float tal3 = 3.4028234663852886e+38;
double tal4 = 1.7976931348623158e+308;

cout << tal1 << endl;
cout << tal2 << endl;
cout << tal3 << endl;
cout << tal4 << endl;

return 0;
}



Niels Dybdahl (20-08-2004)
Kommentar
Fra : Niels Dybdahl


Dato : 20-08-04 08:50

> > Et program skal regne med op til 10 i ellevte potens og det kniber når
vi
> > når den syvende/ottende potens. Så kan den ikke regne med længere. Jeg
> > havde
> > en alm. float til start og har nu en long. Double går vistnok ikke så
> > godt.
> > Hvad kan jeg gøre?
>
> Jeg har lavet et lille testprogram. Det viser at du sagtens kan bruge både
> float og double til at repræsentere 10^11. Jeg laver fire variabler og
> sætter dem til den største værdi de kan have (sådan ca.) og skriver den ud
> igen for at se om det gik godt. "int" og "long" er ens på min maskine.
Hvad
> er output fra dette program hos dig?

float bruger normalt 4 bytes og regner med 6-7 cifre. Den kan sagtens regne
med større tal, men så mangler præcisionen i den anden ende.
long rækker til 9-10 cifre (op til ca 2 milliarder).
double bruger normalt 8 bytes og regner med 15-16 cifre.

Nogle compilere har en long long eller __int64 eller lignende som kan regne
med over 18 cifre.

Niels Dybdahl



Martin (20-08-2004)
Kommentar
Fra : Martin


Dato : 20-08-04 21:08



"Niels Dybdahl" <ndy@fjern.detteesko-graphics.com> skrev i en meddelelse
news:4125ad3a$0$160$edfadb0f@dtext02.news.tele.dk...
Nogle compilere har en long long eller __int64 eller lignende som kan regne
med over 18 cifre.


Ved du om turbo C++ 3.0 compileren kan int64?

jeg har brug for 999 gange 10^9 og det har den svært ved med double allerede
ved 10^8 alene, men igen, skal man så skifte mellem typer af variabler i til
samme rutine -regnestykke for at den regner ok i det lave område?.

Mvh.
Martin



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste