Pretypovavani promennych v cecku
Pavel Troller
patrol@sinus.cz
Úterý Leden 22 11:57:27 CET 2008
> Chtel bych se zeptat, zda je jedno jestli pretypuji v C kompilatoru ve vyrazu prvni operator nebo posledni, zda mi to vrati vzdy stejny vysledek ? Jde mi o to zda si prekladac nejdrive projde vsechny promenne a podle nejpresnejsi promenne zvoli typ promenne pro mezioperace a nebo to funguje nejak jinak ?
>
> Bude vysledek techto vyrazu stejny ?
>
> int16=100*((float)int16/1024)
> int16=100*(int16/(float)1024)
> int16=(float)100*(int16/1024)
>
> tohle samozrejme vrati vysledej jiny, jelikoz se pouzije deleni bez desetinnych mist:
> int16=100*(int16/1024)
>
>
> dekuji
> Milos Sula
Zdravim,
rekl bych, ze 1 a 2 budou stejne, ale 3 bude jine - deleni v zavorce se
vypocte v int a pak se znasobi floatem 100, coz neni ono.
Kratky test (s jinymi hodnotami) to prokazuje:
#include <stdio.h>
int main(void) {
int a,b;
a=5;
b=13;
printf("%f, %f, %f\n",
100*((float)a/b),
100*(a/(float)b),
(float)100*(a/b)
);
}
$ gcc -o test2 test2.c
$ ./test2
38.461540, 38.461540, 0.000000
S pozdravem Pavel Troller
Další informace o konferenci Hw-list