Kezdőoldal » Számítástechnika » Programozás » Miért van az, hogy Pythonban...

Miért van az, hogy Pythonban while ciklust nem lehet, csak egész számmal használni?

Figyelt kérdés

Írtam egy ilyen programot:


x=0

while x != 0.1:

x+=0.001

print(x)


Túlmegy a 0.1en,mivel néha többet,vagy kevesebbet ad hozzá,mint 0,001.


Van erre konkrét magyarázat? :O



2019. febr. 4. 13:59
 1/6 anonim ***** válasza:
100%
A nem egész szám nem tűpontos, valamerre mindig eltér, kerekít. Ennek okáról olvass utána a lebegőpontos számábrázolásnak. A ciklus jól fog működni, ha x < 0.1 feltételt írsz be.
2019. febr. 4. 14:07
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
0%
Gondolj bele, logikátlan lenne nem egész számot megadni neki, hiszen az közel sem olyan pontos. Egyébként meg ez miért lenne jó, ha egy lebegőpontos szám lenne a kilépési feltétel?
2019. febr. 4. 15:15
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:

#2

Miért lenne jó ha egész szám lenne, nem pedig egy bool, string, vagy akármi más? Hagyjuk már ezeket a hülye kérdéseket, valamit addig akar csinálni amíg nem ér el egy adott értéket, ebben az esetben az az érték egy lebegőpontos szám, azért.

2019. febr. 4. 15:27
Hasznos számodra ez a válasz?
 4/6 Ozmium42 ***** válasza:
100%

A pontos magyarázat az, hogy a számítógép kettes számrendszerben gondolkozik, és kettes számrendszerben más törtszámok reprezentálhatóak pontosan, mint tízes számrendszerben. Mondok egy példát:


Az a szám, hogy 1/3, tizedestört alakban 0.3333...

A pontos reprezentáció lehetetlen, mert végtelen sok hármast kell odaírni. Ha pedig véges sok hármasnál megállsz bárhol, az csak egy közelítés lesz, nem adja vissza az 1/3 pontos értékét. De hármas számrendszerben ez a szám pontosan reprezentálható tizedestört alakban is: 0.1


Itt a fordított az eset: 0.1 tízes számrendszerben jól reprezentálható, kettes számrendszerben viszont egy végtelen tizedestört lesz, aminek a python (meg más nyelvek is) levágják a végét. Szóval a valódi szám, amivel dolgozol, egy közelítés lesz, ami a kerekítési hiba miatt egyre jobban el fog térni a várt eredménytől, ahogy műveleteket végzel vele. Próbáld csak megírni úgy a while ciklust, 0.1 helyett beírsz mondjuk 0.5-öt (1/2 => kettő hatvány a nevezőben!), és az x változót növelgeted mondjuk 0.03125-tel (1/32). Láss csodát, működni fog.

2019. febr. 4. 16:09
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
100%

Látom 3–as pythont használsz, akkor a 3.5-től létezik a math.isclose() függvény.

import math

x=0.0

while !math.isclose(x, 0.1):


de ebben az esetben jobb lenne a

while x<0.1:


A magyarázatot már leírta az első és a negyedik válaszadó.

2019. febr. 4. 18:36
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Köszönöm szépen a segítséget! :)
2019. febr. 6. 20:57

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!