[C++] Kan någon förklara det här för mig?

Permalänk
Medlem

[C++] Kan någon förklara det här för mig?

Hej jag sitter här och lär mig C++ Men jag har stött på en sak som gör så min hjärna börja ryka

När jag skriver den här coden

#include <iostream> using namespace std; int main() { cout << 56789*100/100 << endl; cout << 56789/100*100 << endl; cout << (56789+50)/100*100 <<endl; cout << (56789+500)/1000*1000 <<endl; cout << (int)(234.56+0.5) << endl; system ("pause"); return 0; }

Så får jag ut det här svaret

56789 56700 56800 57000 234

Den översta och den sista förstår jag hur det blir så men inte dom i mitten

Visa signatur

CPU -->I7-3820
GPU -->2 x Nvidia680 GTX
OS --> Fedora

Permalänk
Medlem
Skrivet av Sandia:

Hej jag sitter här och lär mig C++ Men jag har stött på en sak som gör så min hjärna börja ryka

När jag skriver den här coden

#include <iostream> using namespace std; int main() { cout << 56789*100/100 << endl; cout << 56789/100*100 << endl; cout << (56789+50)/100*100 <<endl; cout << (56789+500)/1000*1000 <<endl; cout << (int)(234.56+0.5) << endl; system ("pause"); return 0; }

Så får jag ut det här svaret

56789 56700 56800 57000 234

Den översta och den sista förstår jag hur det blir så men inte dom i mitten

Om du har lagrat talen som heltal tappar du alla decimaler när du delar med 100

ex. 12345/100 är normalt lika med 123.45, men nu tappar du decimalerna så det blir lika med 123 istället. När du sedan multiplicerar med 100 igen får du 12300.

Multiplicerar du först däremot får du 12345*100 = 1234500 och sedan 1234500/100 = 12345 (där har du inga decimaler, men hade det varit några hade de försvunnit).

Visa signatur

Dator: i7 4770K, MSI RTX 2060, 16 GB RAM, blandade SSD:s, en gul kabel från HDD till modermodemet

Permalänk
Medlem

Ja, det där är en rolig egenhet som brukar vara en ständig källa till buggar.
Tar du två integers delat med varandra tolkas det som heltalsdivision. Tar du tex 11/5 så går 5 två gånger i 11 och vi får en rest = 1, så i C++ blir 11/5 = 2. För att förhindra heltalsdivision så kan du skriva 11/5.0 istället...

Edit : JoeBlack hann före...

Visa signatur

Namn : Jesper | Ålder : 45 | In-game namn : iller
Yrke : Matematisk modellerare (finansiell matematik), mjukvaruutvecklare för risksystem.
Utbildning : Doktor i matematik + en del mat-stat, numme och IT-relaterat.

Permalänk
Medlem
Skrivet av JoeBlack:

Om du har lagrat talen som heltal tappar du alla decimaler när du delar med 100

ex. 12345/100 är normalt lika med 123.45, men nu tappar du decimalerna så det blir lika med 123 istället. När du sedan multiplicerar med 100 igen får du 12300.

Multiplicerar du först däremot får du 12345*100 = 1234500 och sedan 1234500/100 = 12345 (där har du inga decimaler, men hade det varit några hade de försvunnit).

Skrivet av JesperT:

Ja, det där är en rolig egenhet som brukar vara en ständig källa till buggar.
Tar du två integers delat med varandra tolkas det som heltalsdivision. Tar du tex 11/5 så går 5 två gånger i 11 och vi får en rest = 1, så i C++ blir 11/5 = 2. För att förhindra heltalsdivision så kan du skriva 11/5.0 istället...

Tack för snabbt svar. Jag hade helt och hållit glömt att det blev ett decimal tal efter man delar det med 100

Visa signatur

CPU -->I7-3820
GPU -->2 x Nvidia680 GTX
OS --> Fedora