• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Setprecision- losowe liczby w rozwinięciu

Object Storage Arubacloud
0 głosów
118 wizyt
pytanie zadane 14 lipca 2019 w C i C++ przez blackcaer Nowicjusz (120 p.)
zamknięte 14 lipca 2019 przez blackcaer

Czy mógłby ktoś wyjaśnić dlaczego po wczytaniu liczb z pliku i ustawieniu setprecision na 10 niektóre liczby mają rozwinięcia które nie były nigdzie zapisane? Na przykład w pliku mam 15.2 a po uruchomieniu liczba jest wyświetlana jako 15.19999981, dzieje się tak ze wszystkimi liczbami oprócz całkowitych (np. 15, 12) i liczby 36.5. Cały kod, plik i aplikacja otwarta w cmd jest na screenach zamieszczonych poniżej, jedyna różnica pomiędzy nimi to że w drugim zapisałem cout<<fixed<<setprecision(10); zamiast cout<<setprecision(10); jednak jak widać nic to nie zmieniło.

#include <iostream>
#include <windows.h>
#include <cstdio>
#include <fstream>
#include <iomanip>

using namespace std;
float trdzenia[100];

int main()
{
    cout<<setprecision(10);
    cout << "Wczytywanie liczb";
    for(int i=0; i<3; i++)
    {
    Sleep(1000);
    cout<< ".";
    }
    Sleep(700);
    cout<<endl;
//loading
string linia;
int nr_lini=1;

    fstream plik;
    plik.open("pomiary.txt", ios::in);
    if(plik.good()==false) cout<<"Nie mozna otworzyc pliku!"<<endl;

        while(!plik.eof())
    {
        getline(plik,linia);
        trdzenia[nr_lini-1]=atof(linia.c_str());
        nr_lini++;
    }
     plik.close();

    cout<<"Ilosc pomiarow: "<<nr_lini-1<<endl;
    Sleep(1200);
    for(int i=0; i<nr_lini-1; i++)
    {
    Sleep(300);
    if(i<9)
    cout<<nr_lini-(nr_lini-(i+1))<<":  "<<trdzenia[i]<<endl;
    else
    cout<<nr_lini-(nr_lini-(i+1))<<": "<<trdzenia[i]<<endl;
    }
   int getchar();
    return 0;
}

 

https://drive.google.com/file/d/134vcnIWVPvpIYFDvR65MlKTYhourp6IQ/view?usp=sharing

https://drive.google.com/file/d/1LL_b_u1LpUONCx533KV-V4P8UfgnydI3/view?usp=sharing

komentarz zamknięcia: Otrzymałem satysfakcjonującą odpowiedź
1
komentarz 14 lipca 2019 przez tkz Nałogowiec (42,000 p.)
Dzieje się tak, ponieważ liczby zmiennoprzecinkowe mają tylko pewną dyskretną precyzję. 60.3 nie jest tak naprawdę 60.3, ale jest wewnętrznie reprezentowany jako nieco inna liczba. Dlatego widzisz różnicę. Jest to powszechne we wszystkich obliczeniach zmiennoprzecinkowych i naprawdę nie można tego uniknąć.
komentarz 14 lipca 2019 przez blackcaer Nowicjusz (120 p.)
To w takim razie dlaczego w filmie na którym się wzorowałem wszystko jest wypisywane poprawnie?  https://youtu.be/h2Taf16gQDI?t=1440
komentarz 14 lipca 2019 przez tkz Nałogowiec (42,000 p.)
Zauważ jaka jest tam dokładność, a jaka u Ciebie.
komentarz 14 lipca 2019 przez blackcaer Nowicjusz (120 p.)
Okej, dzięki za pomoc
komentarz 14 lipca 2019 przez Comandeer Guru (601,110 p.)

@tkz, już raz zwrócono Ci uwagę, by pisać odpowiedzi jako odpowiedzi, nie komentarze. Proszę się do tego stosować.

komentarz 14 lipca 2019 przez tkz Nałogowiec (42,000 p.)
Wydaje mi się, że nie wyczerpałem tematu. Ale jakbyś mógł przenieść do sekcji odpowiedzi, było by chyba okey.
komentarz 14 lipca 2019 przez Comandeer Guru (601,110 p.)
No właśnie nie mogę… Dlatego tak ważne jest to, by pisać odpowiedź jako odpowiedź.

Podobne pytania

0 głosów
2 odpowiedzi 602 wizyt
pytanie zadane 20 marca 2021 w C i C++ przez paweł007 Nowicjusz (180 p.)
+1 głos
3 odpowiedzi 209 wizyt
pytanie zadane 11 września 2020 w C i C++ przez Lele8 Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 742 wizyt
pytanie zadane 21 maja 2020 w C i C++ przez Szarlotka Użytkownik (890 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...