Diskuze: celá čísla ve float
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
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é.
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.
Krása funguje jenom bych se ještě zeptal co to 2.0f vlastně je
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
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.
Tohle by ta dvojka způsobila i kdyby a,b,c floatové měl.
Nějak jsem zapomněl, že C neumí pořádně implicitní konverze.
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
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.
Zobrazeno 12 zpráv z 12.