#include <stdio.h> int main(void) { float score1; float score2; float score3; float value; printf("Please enter three exam score: "); scanf("%f", &score1); scanf("%f", &score2); scanf("%f", &score3); printf("First exam: %.1f", score1); printf("%%\\n"); printf("Second exam: %.0f", score2); printf("%%\\n"); printf("Third exam: %.0f", score3); printf("%%\\n"); printf("-----------------------------------"); value = (score1 + score2 + score3) / 3.0; printf("\\n"); printf("Average: %.14f",value); printf("%%.\\n"); return 0; } -Aquí está mi código. los tres puntajes son 75.5 92 100 y el promedio de estos es 89.16666666666667%. pero obtengo 89.16666412353516%. como el promedio cuando ejecuto el programa. cualquier ayuda es apreciada!
Gracias -Slurpski
Cambiar float value; al double value; entonces obtendrá el valor que desea, que fue 89.16666666666667 .
Lo más probable es que Float sea un número de punto flotante de precisión simple IEEE 754 de 32 bits (1 bit para el signo, 8 bits para el exponente y 23 bits para el valor). float tiene 7 dígitos decimales de precisión.
1/6 es periódico en decimal, por lo que no se puede representar exactamente como un número de coma flotante decimal. Requeriría un almacenamiento infinito para hacerlo. Usted afirma que 89.16666666666667 es correcto, pero no lo es. Aplicó algo de redondeo para obtener eso.
1/6 es periódico en binario, por lo que no se puede representar exactamente con un número de coma flotante. Requeriría un almacenamiento infinito para hacerlo. Por lo tanto, se debe aplicar algún redondeo. 89.16666412353515625 se ve raro en decimal, pero es simplemente el número correcto con algo de redondeo aplicado en binario. Al igual que 89,16666666666667 es el número más cercano al número correcto después de redondear en decimal, 89,16666412353515625 es el número más cercano al número correcto después de redondear en binario. (Esto supone el uso del número de punto flotante de precisión simple IEEE, que tiene 24 bits (~7 dígitos) de precisión).
¿Realmente necesitas tantos decimales? Me imagino que sería satisfactorio redondear el resultado a uno o dos decimales.