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