Mógłby mi ktoś wytłumaczyć ten fenomen? http://ideone.com/cI3DBT
#include "stdio.h"
int main() {
double x = 0.478;
double a = 1000.0;
int ix;
ix = (int) (a * x);
double dx;
dx = a * x;
int idx;
idx = (int) dx;
printf("double x = %f, double a = %f\n\n", x, a);
printf("int ix = (int) (a * x) = %d\n", ix);
printf("double dx = a * x = %f\n", dx);
printf("int idx = (int) dx = (int) (a * x) = %d\n", idx);
return 0;
}
Wynik tego jest taki:
double x = 0.478000, double a = 1000.000000
int ix = (int) (a * x) = 477
double dx = a * x = 478.000000
int idx = (int) dx = (int) (a * x) = 478
Nie rozumiem tego. Wiem, że operacje na liczbach zmiennoprzecinkowych nie są przemienne ani łączne. Problem w tym, że ja zachowuję tu przecież kolejność wykonywanych działań, a mimo to wychodzą różne wyniki! Jak C99 obsługuje liczby zmiennoprzecinkowe?
Z góry dzięki.
kmph