I have a function that evaluates a postfix expression. It first converts the numeric digits to float and then evaluates the expression.

Problem is when it multiplies 2 floating types (e.g 3.25 and 5.7) it only gives 18.524996 instead of 18.525. same for division process.

For addition and subtraction, it works fine. The conversion to float also works. I have debugged this one and I dont know what's the source of the problem. Hope someone could help.

Code:void post(Item_c *str, int q, char t, int u) { int l2 = u; int i; int j = 0; float k, z, p, y,x; double f; STACKinit_i(l2); puts(str); for (i = 0; i < l2; i++) { if(isalpha(str[i])) { printf("%f",alpha[tolower(str[i]) - 'a']); system("pause"); STACKpush_i(alpha[tolower(str[i]) - 'a']); } if(((str[i] >= 48) && (str[i] <= 57)) || (str[i] == '.')) { k = str[i] - 48; while ( str[++i] != ' ' && i < l2 && str[i] != '.' && isdigit(str[i]) && str[++i] != '\t' ) { k = k*10 + (str[i] - 48); printf("%f", k); system("pause"); } if (str[i] == '.') { p = str[++i] - 48; j++; while ( (str[++i] != ' ') && (isdigit(str[i])) ) { p = p*10 + (str[i] - 48); j++; } f = p / pow(10 , j); j = 0; } STACKpush_i(k + f); } if(str[i] == '+') { y = STACKpop_i(); x = STACKpop_i(); STACKpush_i(x+y); } if(str[i] == '-') { y = STACKpop_i(); x = STACKpop_i(); STACKpush_i(x-y); } if(str[i] == '*') { y = STACKpop_i(); x = STACKpop_i(); STACKpush_i(x*y); } if(str[i] == '/') { y = STACKpop_i(); x = STACKpop_i(); STACKpush_i(x/y); } } if(q == 1) { alpha[tolower(t) - 'a'] = STACKpop_i(); printf("%f\n", alpha[tolower(t) - 'a']); system("pause"); } else if (q == 5) { printf("\nResulting value = %f\n\n", STACKpop_i()); system("pause"); } }