Avatar billede jannek_ek Nybegynder
23. juni 2004 - 00:22 Der er 21 kommentarer og
1 løsning

jeg tror jeg har problemer med float i c++

float a (6.324e9);

cout << a;

bliver til 6.324e+009 men det burde da blive 6324000000 eller hvad? jeg er lige begyndt...
Avatar billede simonvalter Praktikant
23. juni 2004 - 00:30 #1
du skal vist have fat i en output mainpulator
cout << std::fixed << a;
Avatar billede simonvalter Praktikant
23. juni 2004 - 00:42 #2
at tallet stadig ikke bliver lige precis hvad du havde regnet ned har nok noget at gøre med at en float ikke er precis i så store værdier
den bog jeg sidder med siger at
type  -  precision(decimal digits)  -  range
float    7        1.2x10^-38 to 3.4x10^38
double    17        2.2x10^-308 to 1.810^308
Avatar billede simonvalter Praktikant
23. juni 2004 - 00:43 #3
men der kommer nok en c++ ekspert forbi imorgen der kan forklare det lidt bedre :)
Avatar billede bertelbrander Novice
23. juni 2004 - 00:59 #4
Jeg er ikke ekspert i iostrem's, men:

cygwin-gcc kender ikke fixed, det gør VisualC++, BorlandC++ og DigitalMars. Den er ikke på denne liste:
http://www.cppreference.com/cppio_details.html

Der er normalt ikke nogen grund til at bruge float, brug double.

Så vidt jeg ved er præsisionen for double og float ikke standardiseret.

BorlandC og DigitalMars kan godt skrive tallet (6324000000.000000) præsist hvis der bruges double.
Avatar billede arne_v Ekspert
23. juni 2004 - 07:21 #5
fixed virker med min cygwin ??

Og den er nævnt her http://www.cppreference.com/cppio_flags.html
Avatar billede arne_v Ekspert
23. juni 2004 - 07:31 #6
Normalt siger man single precision (float) ca. 7 cifre og double
precision (double) ca. 15 cifre på PC. Ca. fordi 2 tals system og
10 tals system ligger skævt i forhold til hinanden.

Det er ikke angivet i C eller C++ standarderne.

Men er angivet i IEEE 754 standarden for hardware.

x86, Alpha, PPC, SPARC, Itanium, HP-PA etc. bruger alle IEEE floating points.
Avatar billede jannek_ek Nybegynder
23. juni 2004 - 13:11 #7
simonvalter du havde ret... KOM MED ET SVAR, NU!!!
Avatar billede simonvalter Praktikant
23. juni 2004 - 13:15 #8
ok.
Avatar billede peterditlev Nybegynder
23. juni 2004 - 21:42 #9
float og double angiver kommatal
ved at bruge float i programkoden siger du in range of fra et -tal til et +tal
kort sagt
interger = med værdiområde (-32768 til 32768)
long (visual basic) værdiområde (-2.147.483.648 til 2.147.483.648)
currency (visual basic)værdiområde (-922.337.203.685.477,5808 til 922.337.203.685.477,5808) bruges til kommatal høj præcision
derudover er der flere andre værdier
Avatar billede arne_v Ekspert
23. juni 2004 - 21:45 #10
Jeg tror ikke at spørger er så interesseret i integer/fixed point tal i visual basic ...
Avatar billede peterditlev Nybegynder
23. juni 2004 - 21:59 #11
nææ det rigtigt Arne v. men det
er kun foklarings mæssigt de har samme værdier i tal rækken som c++ de bliver bare kaldt float, double, interger
float er med kommatal i c++
double er også med kommatal men mere nøjagtig end float
interger er kun heltal
Avatar billede arne_v Ekspert
23. juni 2004 - 22:03 #12
Og relevansen af det i et spørgsmål om hvordan man i C++ udskriver floating
point i ikke-scientific format er ?
Avatar billede peterditlev Nybegynder
23. juni 2004 - 22:17 #13
altså Arne ifølge c++ fra netop borland
kommer der ved brug af de forskellige begreber float, double, long double, forskellige værdier frem.
du er selv inde på området 2 og tital system er for forskellige derfor er hex talrækken med og den giver netop det svar som der bliver spurgt om
6.324e+009 i en lommeregner vil e: stå for error her angiver den at der er flere siffre end den gengiver så svaret er rigtig den returnere det rigtige svar
Avatar billede jannek_ek Nybegynder
23. juni 2004 - 22:31 #14
arne hvis double og float kan vise komma tal, hvorfor bliver:
 
  double e = 32 / 5; // dividere
 
  cout << std::fixed << e;
 
så til 6,000000
Det er et kommatal jo, men ikke det jeg håbede på...
Avatar billede bertelbrander Novice
23. juni 2004 - 22:32 #15
Følgende virker i min lidt ældre cygwin (og de andre kompilere jeg prøvede med):

cout.setf(ios::fixed);
cout << a << endl;

Måske er det på tide at finde en anden kompiler, eller opdatere cygwin...
Avatar billede arne_v Ekspert
23. juni 2004 - 22:33 #16
32 / 5 laver heltals division

double e = 32.0 / 5.0;
double e = 32.0 / 5;
double e = 32 / 5.0;
double e = ((double)32) / 5;
double e = 32 / ((double)5);
double e = ((double)32) / ((double)5);

vil alle returnere det du ønsker
Avatar billede bertelbrander Novice
23. juni 2004 - 22:33 #17
Jannek:
Resultatet af en division med to heltal (integers) er et heltal.
Avatar billede jannek_ek Nybegynder
23. juni 2004 - 22:54 #18
Det virker sku arne... KOM MED ET SVAR! NU!!
Avatar billede arne_v Ekspert
23. juni 2004 - 22:56 #19
Den her tråd er lukket. Du fik et svar fra Simon og accepterede det og så
er tråden lukket.
Avatar billede jannek_ek Nybegynder
23. juni 2004 - 22:58 #20
hmm
jeg har da set folk der gir point flere gange... mener jeg
Avatar billede arne_v Ekspert
23. juni 2004 - 23:01 #21
Kan ikke lade sig gøre.

Man kan give point til flere i et spørgsmål men point skal gives samtidigt.

Men glem det. Det var gratis. Og iøvrigt er jeg sikker på at Simon både
kunne og ville have svaret på det, hvis ikke jeg havde set det først.
Avatar billede jannek_ek Nybegynder
24. juni 2004 - 00:13 #22
ok
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