/ 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
Retunering af Long Double istedet for doub~
Fra : Esben Bach


Dato : 14-04-03 20:46

Hejsa jeg har et lille problem med følgende stykke kode, det er et program
der skal regne kvadratroden med newtons metode og det virker umiddelbart
godt nok, men der bliver retuneret en double istedet for en long double,
nogen der kan foklare hvorfor, så ville jeg sætte pris på det.

long double kvrod(long double krod, int iteration)
{
long double temp=1.0, x=krod/2;
int i;

for (i=1; i<=iteration; i++)
{
temp = 0.5*(x+krod/x);
x = temp;
}
return x;
}

int main(void)
{
printf("Kvadratrod: %Lf\n",kvrod(25,10));

return 0;
}

--
Esben




 
 
Klaus Petersen (14-04-2003)
Kommentar
Fra : Klaus Petersen


Dato : 14-04-03 23:00

> godt nok, men der bliver retuneret en double istedet for en long double,

hvordan ved du det?



Esben Bach (15-04-2003)
Kommentar
Fra : Esben Bach


Dato : 15-04-03 06:32

jeg skriver den ud.
--
Esben

"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in message
news:b7fb0n$gpb$1@sunsite.dk...
> > godt nok, men der bliver retuneret en double istedet for en long double,
>
> hvordan ved du det?
>
>



Mogens Hansen (15-04-2003)
Kommentar
Fra : Mogens Hansen


Dato : 15-04-03 19:17


"Esben Bach" <esba0233@but.auc.dk> wrote in message
news:b7g5gn$qtl$1@sunsite.dk...
> jeg skriver den ud.

Og du kan se at det ikke er en long double fordi ....

Bemærk at på nogle compilere (f.eks. Microsoft Visual C++ i de sidste mange
versioner) er der ikke forskel på "double" og "long double" selv om det er 2
forskellige typer.

Venlig hilsen

Mogens Hansen



Flare (15-04-2003)
Kommentar
Fra : Flare


Dato : 15-04-03 21:04

> Bemærk at på nogle compilere (f.eks. Microsoft Visual C++ i de sidste
mange
> versioner) er der ikke forskel på "double" og "long double" selv om det er
2
> forskellige typer.

Og det er igen fordi en double er 32 bit. ....så mangler der jo lidt til
long double. Den er forøvrigt "forbudt" at skrive til portable kode så glem
den.

Kunne forstille mig at den måske bliver brugt igen til 64 bit systemer.

Anders



Mogens Hansen (15-04-2003)
Kommentar
Fra : Mogens Hansen


Dato : 15-04-03 22:20


"Flare" <dct_flare@hotmail.com> wrote
> > Bemærk at på nogle compilere (f.eks. Microsoft Visual C++ i de sidste
> mange
> > versioner) er der ikke forskel på "double" og "long double" selv om det
er
> 2
> > forskellige typer.
>
> Og det er igen fordi en double er 32 bit.

hmm...
Jeg forstår ikke hvad mener.

Hvorfra har du opfattelsen at "double" med Microsoft Visual C++ compilere
skulle være 32 bit ? (Hint: "double" er 64 bit ligesom "long double" med
Microsoft Visual C++ )

> ....så mangler der jo lidt til
> long double.

Hvad mener du ?
Der gælder at
sizeof(float) <= sizeof(double) <= sizeof(long double)
og ikke ret meget mere.

> Den er forøvrigt "forbudt" at skrive til portable kode så glem
> den.

Hvilken "den" ?
Der er både omtalt "double" og "long double".

>
> Kunne forstille mig at den måske bliver brugt igen til 64 bit systemer.

Hvilken "den" ?
Hvad har det at gøre med hvorvidt det er et 64 bit system ?

Intel 32 bit x86 processorer har altid direkte understøtet 32, 64 og 80 bit
floating point størrelser i deres floating point instruktioner.
Andre C++ compilere til Intel 32 bit x86 processorer understøtter disse
direkte som "float" (32 bit), "double" (64 bit) og "long double" (80 bit).

I meget gamle versioner af Microsoft Visual C++ (så vidt jeg husker f.eks.
V2.0) var "long double" 80 bit, men det blev ændret angiveligt for at
være kompatibel med Alpha processoren.

Venlig hilsen

Mogens Hansen





Esben Bach (18-04-2003)
Kommentar
Fra : Esben Bach


Dato : 18-04-03 20:59

Jeg har selv fundet fejlen det skyldes for det første en outdated gcc
compiler der ikke forstår de parametre jeg smider på den for at få den til
at forstå at der arbejdes med en long double, for det andet skyldes det at
jeg afvikler programmet på en Sun Solaris der er ældre end 2.0 (kan ikke
huske den præcise version), og så vidt jeg har været i stand til
understøtter SPARC ikke long double i disse tidlige versioner. (Det er hvad
jeg har kunnet læse mig frem til jeg har ikke haft tid til at teste det
endnu)

--
Esben
"Mogens Hansen" <mogens_h@dk-online.dk> wrote in message
news:b7hso4$28lb$1@news.cybercity.dk...
>
> "Flare" <dct_flare@hotmail.com> wrote
> > > Bemærk at på nogle compilere (f.eks. Microsoft Visual C++ i de sidste
> > mange
> > > versioner) er der ikke forskel på "double" og "long double" selv om
det
> er
> > 2
> > > forskellige typer.
> >
> > Og det er igen fordi en double er 32 bit.
>
> hmm...
> Jeg forstår ikke hvad mener.
>
> Hvorfra har du opfattelsen at "double" med Microsoft Visual C++ compilere
> skulle være 32 bit ? (Hint: "double" er 64 bit ligesom "long double" med
> Microsoft Visual C++ )
>
> > ....så mangler der jo lidt til
> > long double.
>
> Hvad mener du ?
> Der gælder at
> sizeof(float) <= sizeof(double) <= sizeof(long double)
> og ikke ret meget mere.
>
> > Den er forøvrigt "forbudt" at skrive til portable kode så glem
> > den.
>
> Hvilken "den" ?
> Der er både omtalt "double" og "long double".
>
> >
> > Kunne forstille mig at den måske bliver brugt igen til 64 bit systemer.
>
> Hvilken "den" ?
> Hvad har det at gøre med hvorvidt det er et 64 bit system ?
>
> Intel 32 bit x86 processorer har altid direkte understøtet 32, 64 og 80
bit
> floating point størrelser i deres floating point instruktioner.
> Andre C++ compilere til Intel 32 bit x86 processorer understøtter disse
> direkte som "float" (32 bit), "double" (64 bit) og "long double" (80 bit).
>
> I meget gamle versioner af Microsoft Visual C++ (så vidt jeg husker f.eks.
> V2.0) var "long double" 80 bit, men det blev ændret angiveligt for at
> være kompatibel med Alpha processoren.
>
> Venlig hilsen
>
> Mogens Hansen
>
>
>
>



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste