C programozásnál az megoldható, hogy addig szorozzon egy számot 0,2-vel amíg el nem éri az x számot és aztán kiírja, hogy hányszor kellett neki beszorozni ahhoz, hogy elérje az x számot? Do while ciklussal próbálkozok de valahogy nem akarja kiírni.
Így állok eddig nagyjából. (Ez a programomnak a lényege).
ora =0.2,i=0;
Do {
ora=(ora*x)
i++;
}while (ora==x);
printf ("%d",ora);
Pro tip #1: Ha lebegőpontos számokkal számolsz, akkor nem ==-vel nézed meg, hogy egyenlőek-e, hanem így: abs(ora-x) < 1e-15
Pro tip #2: ora = (ora*x) az ugyanaz, mint az ora *= x
"Akkor miért nem jó,hogy ora==x"
Egyrészt a lebegőpontos számábrázolás pontatlanságai miatt, másrészt mert mi a garancia, hogy egyszer is egyenlő lesz a két szám?
Egyébként te most az osztást akarod feltalálni?
Mert arra meg kitalálták az osztás operátort.
Ne haragudjatok meg,de mi nem érthető ezen amit kérdezek?
Ezt szeretném megcsinálni -> A 0,2 -t addig szorozza be nem tudom mennyivel ez a számtól függ amíg el nem éri az x számot (amit a felhasználó ad meg). Majd írassa ki,hogy hányszor kellett beszoroznia a 0,2-t,hogy elérje az x számot.
Az, hogy ezt úgy kell kiszámolni, hogy
double result = x / 0.2;
„Ezt most nem értem. do {}while()<-- ez azt jelenti,hogy eddig mennyen nem? Akkor miért nem jó,hogy ora==x.”
Nem azt jelenti, hogy ora==x-ig menjen, hanem, hogy ora==x esetén álljon le, ami marha nagy különbség. A te változatodban akkor is ismételget, ha ora<x, meg akkor is, ha ora>x. A lebegőpontos műveletek pontossága köztudomásúlag nem végtelen, ezért mindig számítani kell rá, hogy a számábrázolás korlátaiból adódó számolási hibák galibát okozhatnak. Ha az ismétlődő műveletek során felhalmozódik mondjuk 0.000000001 eltérés a számtanilag helyes és az ábrázolható eredmény között, akkor az egyenlőséged soha sem fog teljesülni. A programod nagyon lelkiismeretesen megvizsgálja, hogy azonos-e a két szám, és mivel nyilvánvalóan nem azonos, szépen elmegy az x-ed mellett, és onnantól már mehet is ítéletnapig, mert többször már a büdös életben nem fordul elő ez a csillagállás. Ezért kell azt vizsgálni, hogy egy tartományon belül van-e, esetleg, hogy az összehasonlított számok különbsége kisebb-e valamekkora tűrésnél.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!