You are passing value in floating point representation while you used %d
specifier which forces printf to expect an int
.
There is no 'automatic cast' when you pass variables to a variandic function like printf, the values are passed into the function as the datatype they actually are (or upgraded to a larger compatible type in some cases) because c is weakly typed language.
If you pass type with incompatible internal representation you will get garbage output.
Change
printf("SI = %d", si);
to
printf("SI = %f", si);
or (if you would like to get integral value of expression)
printf("SI = %d", (int)si);