Transmisja float funkcji w C++, najwyraźniej zmienia dokładność

0

Pytanie

To jest bardzo proste pytanie, ale jestem ciekaw przyczynę tego: -Jeśli ja отладю następujący kod w C++ :

void floatreturn(float i){
      //nothing
}

int main(){
    float a = 23.976;
    floatreturn(a);
    return 0;
}

Śledząc przekazana wartość a, po wpisaniu floatreturn to wygląda jak 23,9759998. W rezultacie wszelkie przetwarzanie wartości w funkcji wymaga ręcznego ustawienia dokładności. Czy dla tego przyczyna i czy jest jakiś sposób aby tego uniknąć?

c++ floating-point
2021-11-24 04:32:57
1

Najlepsza odpowiedź

0

Problem pojawił się wcześniej floatreturn(a);.
Stało się to w float a = 23.976;
floatreturn(a); to nie ma znaczenia.

Istnieje około 2^32 różnych wartości, które float dokładnie może kodować. 23.976 nie jest jednym z nich. Najbliższa кодируемая float to około 23,9759998...

Aby tego uniknąć, należy użyć wartości, które mogą być zakodowane jako float lub znosić bliskość - około 1 część 2 24

2021-11-24 16:43:03

Dziękuję Markowi za link i чуксу za krótka odpowiedź.
mv_p

Jeszcze jeden pouczająca chwili do mnie: dlaczego cout domyślnie ma dokładność do 3 miejsc po przecinku, jeśli перепечатываем zmienną bez instalacji precyzji wyjścia? Rozumiem, że zachowanie spławika zawsze będzie zwracać maksymalną możliwą binarny pływak, i że cout jest zaokrąglana w górę.
mv_p

@mv_p Jaki to wynik widzieliście?
chux - Reinstate Monica

za pomocą prostego "float x = 23,976; cout << x;" widzę "23,976"
mv_p

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................