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
 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.
 
				
