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

Błędne wyniki podczas działań - Python

Object Storage Arubacloud
0 głosów
217 wizyt
pytanie zadane 1 czerwca 2023 w Python przez wojtek_programista Nowicjusz (170 p.)

Cześć,

zacząłem swoją naukę Pythona. Chciałem napisać program, który wykonuje proste działania matematyczne(załączony kod) i moje pytanie jest następujące - dlaczego po wykonaniu działania 5.3 - 5.6 otrzymuję wynik -0.2999999999999998? Powinno być 0.3.

Pozdrawiam.

def oblicz(num1, znak, num2):
    if znak == "+":
        return num1 + num2
    elif znak == "-":
        return num1 - num2
    elif znak == "/":
        return num1 / num2
    return num1 * num2


number1 = float(input("podaj pierwszą liczbę: "))
znak1 = input("podaj operator: ")
number2 = float(input("podaj drugą liczbę: "))
print(oblicz(number1, znak1, number2))

 

1 odpowiedź

+1 głos
odpowiedź 1 czerwca 2023 przez adrian17 Ekspert (344,860 p.)

Ponieważ zazwyczaj języki nie operują na dowolnych liczbach rzeczywistych, tylko na liczbach zmiennoprzecinkowych - które zajmują mało pamięci, ale nie mają idealnej precyzji; niektóre operacje albo nawet wartości nie da się zareprezentować z idealną precyzją.

Szczegóły i przykłady: https://0.30000000000000004.com/

Proponuję żebyś wypisał liczbę z zaokrągleniem do kilku liczb po przecinku, na przykład

'{:.2f}'.format(5.3 - 5.6) # -0.30

 

komentarz 1 czerwca 2023 przez wojtek_programista Nowicjusz (170 p.)
Dziękuję bardzo za odpowiedź, zapamiętam. Wcześniej używałem C++ i tam nie było takiego problemu.
2
komentarz 1 czerwca 2023 przez adrian17 Ekspert (344,860 p.)

Gdzie tam, w C++ie jest taki sam problem :) Tylko po prostu domyślnie formatowanie zaokrągla liczbę. Gdybyś np spróbował ją porównać wynik odejmowania do -0.3, to też by Ci pokazał że są "różne".

komentarz 1 czerwca 2023 przez wojtek_programista Nowicjusz (170 p.)
O proszę, przez 4 lata nauki w liceum tego nie zauważyłem, a faktycznie tak jest. Dobrze wiedzieć.
2
komentarz 2 czerwca 2023 przez Oscar Nałogowiec (29,320 p.)
Bo to nie jest problem jednego czy drugiego języka, tylko komputerów jako takich. Zwykle programiści umieją zamieniać liczby pomiędzy różnymi systemami (dwójkomym, ósemkowym, dziesiętnym) ale ograniczone do liczb całkowitych (a czasami i naturalnych). Mało kto wchodzi w wartości ułamkowe. A tak okazuje się że często ułamek który w systemie dziesiętnym jest określnony na paru cyfrach po przecinku, w układzie dwójkowym ma nieskończone rozwinięcie (okresowe). A komputery nie mają nieskończonej liczby cyfr. 0.3 akurat takie jest. Po prostu twórcy biblioteki C przyjeli, by przy wypisywaniu liczb float zaokrąglić jest sensownie - tj na tyle na ile dokładne są te liczby.

Podobne pytania

0 głosów
1 odpowiedź 494 wizyt
0 głosów
0 odpowiedzi 286 wizyt
pytanie zadane 29 stycznia 2023 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
1 odpowiedź 486 wizyt
pytanie zadane 6 listopada 2022 w Python przez Matlane Użytkownik (560 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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!

...