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