Avatar billede theguardian Nybegynder
21. oktober 2002 - 14:56 Der er 9 kommentarer og
1 løsning

C++ dårlig til decimal tal ?

Jeg er ved at lave et matematik program i selvvalgt opgave og når jeg vil 8888888 plus 7777777 får jeg et mærkelig tal der hedder: 1.66667e+07 jeg bruger følgende kode:
double Plus (double x, double y)
{
    cout << x << " + " << y << " = ";
    return (x+y);
}

Nogen der kunne hjælpe mig ?
Avatar billede theguardian Nybegynder
21. oktober 2002 - 14:57 #1
skal lige siges jeg er helt newbie i C++

Og jeg bruger Dev-C++
Avatar billede jpk Nybegynder
21. oktober 2002 - 15:08 #2
Hvad mener du med at du får et mærkeligt tal, er det når du skriver det ud?
Avatar billede chries Nybegynder
21. oktober 2002 - 15:09 #3
Det er fordi det er floating point, de kan ikke rammme alle "tal" mellem 0 og max grænse, men et udplug af dem. De rammer for det meste temmeligt præsist ved små tal og får større afvigelser jo større de bliver.
Avatar billede chries Nybegynder
21. oktober 2002 - 15:14 #4
f.eks med typen float ( mindre prøsis end double), hvis man hele tiden lægger 0.1 til, ender resultatet ikke på kun 2 decimaler.

#include <iostream.h>

int main(int argc, char* argv[])
{
    float x = 128.0f;

    for( int i=0; i<500; i++ )
    {
        cout << x << endl;
        x +=  0.01f;
    }

    return 0;
}

output:
130.059
130.069
130.079
130.089
130.099
130.109
130.119
130.129
130.139
130.149
130.159
130.169
130.179
130.189
130.199
130.209
130.219
130.229
Avatar billede arne_v Ekspert
21. oktober 2002 - 15:21 #5
Det er ikke et FP afrundings-problem.

Double har betydelig større precision end som så.

C++ er tilsyneladende bar glad for scientific notation.

Mingw:

  double x = 8888888;
  double y = 7777777;
  cout << x << " " << y << " " << (x+y) << endl;
  printf("%10.1f %10.1f %10.1f\n",x,y,x+y);

giver:

8.88889e+06 7.77778e+06 1.66667e+07
8888888.0  7777777.0 16666665.0
Avatar billede mbulow Nybegynder
21. oktober 2002 - 22:06 #6
Prøv med den her:

cout << fixed << x << " " << y << endl;

fixed - skulle få cout til at udskrive tal UDEN at bruge scientific notation
Avatar billede theguardian Nybegynder
22. oktober 2002 - 08:12 #7
hmmm, mbulow: 20 G:\054\Dev-Cpp\selvvalgt opgave\calc.cpp
`fixed' undeclared (first use this function)
hvilken header ligger fixed i ?
Avatar billede jpk Nybegynder
22. oktober 2002 - 08:17 #8
Jeg tror du skal gøre således

cout << setiosflags(ios::fixed);
cout << x << " " << y << endl;
Avatar billede theguardian Nybegynder
22. oktober 2002 - 08:30 #9
20 G:\054\Dev-Cpp\selvvalgt opgave\calc.cpp
implicit declaration of function `int setiosflags(...)'


nej :(
Avatar billede arne_v Ekspert
22. oktober 2002 - 08:47 #10
Se lige dette eksempel:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
  double x = 8888888;
  double y = 7777777;
  cout << (x+y) << endl;
  cout << setiosflags(ios::fixed) << (x+y) << endl;
  cout << setw(10) << setprecision(1) << (x+y) << endl;
}

Du skal inkludere iomanip for nogle af disse
avancerede funktioner.
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