¿Cuáles son las probabilidades de un error de cálculo en un Arduino?

1

Estoy ejecutando un experimento con un Arduino que requiere varios millones de cálculos por segundo para ser realizado por un Arduino. Me preguntaba qué probabilidades hay (si alguna) de que uno de estos cálculos sea incorrecto, y ¿cómo podría evitar tal error?

    
pregunta TheDoctor

4 respuestas

3

No sé las probabilidades de que esto ocurra, y sospecho que son increíblemente bajas. Sin embargo, si realmente está tratando de detectar tales errores, aquí hay una manera simple de hacerlo: Realice exactamente el mismo cálculo almacenando los resultados dos veces de forma independiente. Si todo ha ido bien, ambos resultados serán idénticos. Entonces, si los compara y difieren, sabe que algo salió mal y podría repetir los cálculos hasta que los resultados coincidan. Si bien es teóricamente posible que falte errores, ahora las probabilidades se han reducido aún más. La desventaja es, por supuesto, que al menos duplica el número de cálculos y tiene que hacer comparaciones adicionales, las cuales requieren más ciclos de CPU. Ciertamente hay otras soluciones más elegantes.

    
respondido por el fm_andreas
1

¿Error de cálculo? Prácticamente ninguno. Sin embargo, eso depende de tres cosas.

  1. Código de precisión. Si su código está dañado, sus resultados serán inútiles. No es culpa de Arduino. También código que el compilador no optimiza de forma extraña. Una buena comprensión de las bibliotecas de Arduino ocultas que utiliza también sería importante.

  2. Código eficiente. En el máximo indicado de Arduino, 16 mhz, eso deja solo 16 tics del reloj para hacer un solo cálculo. Necesita un código rápido y preciso que se ajuste a esos 16 cálculos. Probablemente no sea posible en código Arduino con toda su sobrecarga. Tal vez ni siquiera sea posible en C pura, dependiendo del tipo de cálculos que necesite. Prepárese para aprender a ensamblar.

  3. Tipo de cálculos. El ATMega328 en un Arduino Uno (el "" Arduino estándar "") no tiene una unidad de punto flotante. Cualquier cálculo matemático que requiera fracciones o resultados decimales será de código pesado y no preciso. Perderá / ganará una fracción de un dígito en cada operación de punto flotante. Apégate al punto fijo y casi no tendrás posibilidad de errores de cálculo.

respondido por el Passerby
0
  

Estoy ejecutando un experimento usando un Arduino que requiere varios   Millones de cálculos por segundo a ser realizados por un Arduino. yo era   preguntándose las probabilidades (si las hay) de que uno de estos cálculos sea incorrecto,   ¿Y cómo podría evitar tal error?

Una pregunta muy mala en su naturaleza ...

Si su comprensión del cálculo 'incorrecto' es aquella en la que el arduino, por ejemplo, instaló la ejecución de '+' en una operación '-', entonces no hay posibilidad de que ocurra. Las operaciones a realizar están 'anidadas' en el código de operación de cada instrucción, es decir, debe tener un chip defectuoso (muy poco probable).

Los cálculos en sí mismos también pueden variar en términos de complejidad. Por ejemplo, una simple adición / resta (+/-) o funciones bitwise (y, ni, xor ...) se realizan en hardware, lo que significa que la posibilidad de error dentro de estos cálculos es muy pequeña (casi imposible).

Sin embargo, como lo mencionaron otros usuarios anteriormente, arduino lleva los niveles de programación unos pasos más altos, al permitirle usar directamente operaciones de punto flotante u operaciones como la multiplicación / división / potencia de / etc. Estas funciones no son implementado en hardware, pero más bien es realizado por muchas funciones menos complejas. Por ejemplo, la multiplicación de A * B es lo mismo que A + A + A ... B veces ... Estas funciones complejas son generalmente iterativas (se realizan en iteraciones numeradas) y toman mucho más tiempo en ejecutarse.

Otra cosa es la precisión de las unidades de punto flotante. Depende de la organización de los bits (ancho) o de si está utilizando exponencial para representación y así sucesivamente.

Para aclarar mi punto: el arduino no puede enloquecerse, a menos que se lo digas. No utilizará la multiplicación en lugar de la división, ni realizará la operación correcta en números incorrectos, a menos que lo programe para hacerlo. Y realizar millones de cálculos por segundo es un negocio difícil incluso para chips mucho más rápidos y potentes.

    
respondido por el dtod
-5

Esencialmente cero. Si las computadoras no fueran confiables para hacer cálculos, no los usaríamos.

    
respondido por el nogginboink

Lea otras preguntas en las etiquetas