Primero debe definir el redondeo entre usted y el proveedor, es posible que lo hayan hecho correctamente en función de su definición.
En segundo lugar, si solo está hablando de dos lugares decimales, no hay razón para usar un punto flotante, debería haberlo especificado sin punto flotante, y tal vez puede cambiarlo para que se defina para que no use el punto flotante. Micro de 8 bits o no, no es necesario. Puede hacer fácilmente matemáticas de 8 o 16 bits y ordenar todo el redondeo que desee con unos pocos decimales (un programador competente nunca necesita hardware de punto flotante porque siempre debería poder mantener el punto en su jefe, acreditado a John Von Neumann).
No importa si es un microcontrolador o una matriz, los formatos de punto flotante tienen problemas, al igual que los compiladores, al igual que los programadores. Al igual que 1 / 3rd y 2 / 3rds son un problema en un mundo decimal, 1 / 10th por ejemplo es un problema en programas de punto flotante basados en binarios. Si quiero agregar 2 / 3rds a 0.83 es que 0.667 + 0.83 = 1.49 ... o 0.67 + .83 = 1.50 uno redondearía el otro no, se podría argumentar que ambos son correctos. Sí, es cierto que aún tiene que definir su redondeo cuando usa un punto fijo (toma 200/3 y obtiene 66 (que representa 0.66) o usa redondeo y toma ((400/3) +1) / 2) y obtiene 67 ?) Su pregunta no es hacer divisiones, sino que se multiplica, usted todavía termina con los mismos tipos de problemas. Además, tenga en cuenta que el punto flotante en el hardware de un procesador no es algo para emocionarse, es mucho más difícil solucionar los errores que probablemente existen (el Pentium no fue el primero ni el último Fpu con problemas, su sistema operativo tiene que solucionarlos). o tal vez simplemente los dejen allí para que fracasen estos días). Un fpu suave es más lento pero mucho más fácil de arreglar después de que el chip está en producción.
2.36 es como 1 / 3rd es decimal, es una cosa de dígitos repetidos cuando se representa en flotador binario. este patrón de bits parece bastante temprano. 101110000101000111 (más fácil de ver en doble que en sencillo, una vez que se ve en doble, puede verlo en el sencillo). Sin embargo, no puedo hacer eso o una versión abreviada de eso causa suficiente error como para pasar a 133. Mirando la precisión simple, es decir, que no es el único formato de punto flotante ...
01000000000101110000101000111101 2.36
01000000000101110110110110110111 (132.5/56 = ~2.36607...)
el 110 se repite y se redondea en el backend. no es que esto esté relacionado de forma remota en este punto, sino solo por curiosidad, cámbielo a
01000000000101110110110110110110
veces 56 y obtienes 132.499 ...
La conclusión es que como se indica aquí cuando usa un lápiz y papel o una calculadora, multiplica 56 * 2.36 y obtiene 132.16 y eso se redondea a 133 para que quede claro que considera que esto es un fracaso / error que necesitan para solucionar. Quizás no importa cómo o por qué se les ocurrió la respuesta incorrecta, siempre y cuando la próxima versión del software dé la respuesta correcta. No sé qué tan difícil es hacer que este producto realice este cálculo matemático, pero debe probarlo para muchos valores diferentes para ver si siempre obtiene la respuesta esperada, o incluso mejor, si es posible, tenga la sección de código que extrae el cálculo. y validarlo de forma aislada contra una larga lista de operandos. O incluso especificarlo de esa manera, el software debe poder obtener el resultado esperado para esta lista de operandos y respuestas.