IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: celá čísla ve float

Aktivity
Avatar
ondra.482
Člen
Avatar
ondra.482:12.4.2013 21:20

if (D<0)
{

x1=-(b/(2*a));
x2= sqrt(-D)/(2*a);

cout << "Rovnice nema zadny realny koren\n";
cout << "Rovnice ma dva imaginarni koreny\n";
cout << "x1= " << x1 << "+" << x2 <<"i";
//x2=((-b)-sqrt(D))/(2*a);
cout << "\nx2= " << x1 <<"-"<< x2 << "i\n";

}
Zdravím. Mám problém co týče diskriminantu. Když je D<0 hodí mě to na tuto podmínku,jenže ze vzorce x1=-(b/(2*a)); mi to vypíše jen celou cifru a další desetinné čísla mi to nevypisuje,ikdyž mám datový typ float.

 
Odpovědět
12.4.2013 21:20
Avatar
Odpovídá na ondra.482
Luboš Běhounek Satik:12.4.2013 21:25

Používej tag code a vlep to sem znovu, tohle se moc číst nedá :)
EDIT: a vlep sem i jakých typů jsou proměnné.

Editováno 12.4.2013 21:26
Nahoru Odpovědět
12.4.2013 21:25
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na ondra.482
Luboš Běhounek Satik:12.4.2013 21:31

Problém bude asi ten, že
2 * a
se ti vždy spočítá celočíselně, protože násobíš celý číslo (2) a desetinný (proměnná a), což přímo nejde, takže se provede konverze a a se převede na celé číslo, protože první operand je celočíselný.

Nahraď tu dvojku tímto: 2.0f a pak už by to mělo běžet.

Editováno 12.4.2013 21:31
Nahoru Odpovědět
12.4.2013 21:31
https://www.facebook.com/peasantsandcastles/
Avatar
ondra.482
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
ondra.482:13.4.2013 10:25

Krása :)) funguje jenom bych se ještě zeptal co to 2.0f vlastně je

 
Nahoru Odpovědět
13.4.2013 10:25
Avatar
Odpovídá na ondra.482
Luboš Běhounek Satik:13.4.2013 10:36

Když zadáváš někde v kódu číslo přímo, tak kompilátor pozná podle nějakých vlastností, jakého typu to číslo je, většinou je to nějaký prefix nebo suffix (předpona / přípona).

Ukážu jich pár na dvojce:
2 je obyčejný int
2L je long
2.0 je double
2.0f je float
0x2 je (obvykle int) číslo zadané v hexa

Nahoru Odpovědět
13.4.2013 10:36
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na ondra.482
Kit:13.4.2013 10:38

Je to zápis čísla 2 v pohyblivé řádové čárce. Datový typ float.

Pokud bys měl a, b, c ve float, tak bys tohle neřešil.

Nahoru Odpovědět
13.4.2013 10:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
ondra.482
Člen
Avatar
ondra.482:13.4.2013 10:40

Už jsem si na to přišel,ale díky moc :))

 
Nahoru Odpovědět
13.4.2013 10:40
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:13.4.2013 10:41

Tohle by ta dvojka způsobila i kdyby a,b,c floatové měl.

Nahoru Odpovědět
13.4.2013 10:41
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:13.4.2013 10:44

Nějak jsem zapomněl, že C neumí pořádně implicitní konverze.

Nahoru Odpovědět
13.4.2013 10:44
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
ondra.482
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
ondra.482:13.4.2013 10:45

Právě že né...a,b,c jsem měl v int a Diskrinant a kořeny ve float protože jsem měl za to,že až samotný kořen by se měl vypsat v desetinné formě. a když jsem oboje hodil do float tak to šlape i s tou dvojkou :)

 
Nahoru Odpovědět
13.4.2013 10:45
Avatar
ondra.482
Člen
Avatar
ondra.482:13.4.2013 10:50

a ještě bych sa optal,jak ošetřit vstupní údaje tak,že když zadám nějaké písmeno, nebo něco kromě číslich, tak aby mě to opravilo na to,abych zadal číslici....

 
Nahoru Odpovědět
13.4.2013 10:50
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:13.4.2013 10:54

Aha, tak měl jsi pravdu, doteď jsem měl pocit, že se celá operace počítá podle typu levého operandu, ale evidentně je to fuk a stačí, aby byl jen jeden operand typu float a celé se to počítá jako násobení floatů.

Každopádně nejlepší řešení je vždy oba operandy přetypovat na stejný typ, pak má člověk jistotu. :)

Nahoru Odpovědět
13.4.2013 10:54
https://www.facebook.com/peasantsandcastles/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.