Dziwne zaokrąglanie liczb typu float

0

Napisać program wczytujący ciąg liczb rzeczywistych z
klawiatury (dowolny ciąg max 100 liczb). Liczby te należy zapisywać do tablicy float tab[100]. Następnie należy wyznaczyć wartość średnią i maksymalną tych liczb. Wczytywanie jest realizowane do momentu kiedy użytkownik wprowadza liczby (wtedy scanf(‘’%f”,&liczba)==1). Po wprowadzeniu litery lub znaku specjalnego program kończy wczytywanie liczb do tablicy i prezentuje wyniki. Wskazówka: zacznij od napisania programu który zawsze wczyta dokładnie 10 liczb

Mam pytanie, realizuję powyższe zadanie i dlaczego w takim kodzie, tzn. wczytuję dopóki użytkownik podaje liczby, a zaś jak na razie je wypisuję, to po wpisaniu przez użytkownika nie liczby, mam jakieś dziwne przybliżenie ostatniego elementu?

#include<iostream>
#include<stdio.h>
#include<conio.h>

using namespace std;

        int main()
    {
        float tab[100];
        int i, k;
        
        printf("Podaj liczbe rzeczywista: \n");
        for (i = 0; i < 100; i++)
        {
            printf("%d - element: ", i+1);
            if (scanf("%f", tab + i) == 0)    // wczytanie nie powiodło się
                break;
        }// żeby pokazać, ile liczb się udało wczytać
        for (k = 0; k < i; k++)
            printf("%f\n", tab[k]);
        _getch();
        return 0;
    }

Wpiszcie sobie np. 41, 85.5555, L

i otrzymacie: 41.000000, 85.555496

Skąd to się bierze?

zamiana znacznia [quote] na <quote>, dodanie znaczników `` oraz wstawienie kodu do posta - @furious programming

0

Liczby zmiennoprzecinkowe mają ograniczoną dokładność. float ma najmniejszą.

0

No już się domyśliłem tylko nie miałem pojęcia, że aż taką małą, że w 4 miejscu po przecinku już zaokrągla.

1 użytkowników online, w tym zalogowanych: 0, gości: 1