|
| 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
>
>
>
>
| |
|
|