Operación de punto flotante no válida en RokoBox: causas y soluciones

Una operación de punto flotante no válida en RokoBox suele estar relacionada con la forma en que los ordenadores representan, almacenan y calculan números reales mediante una cantidad finita de memoria. Los números de coma flotante permiten trabajar con fracciones, decimales y valores extremadamente grandes o pequeños, pero no todos los números decimales pueden representarse exactamente en formato binario.

Para diagnosticar este tipo de error es necesario distinguir entre una operación matemáticamente inválida, un desbordamiento, un subflujo, una conversión de tipos, una pérdida de precisión y una comparación incorrecta entre valores aproximados.

Qué significa una operación de punto flotante no válida

Una coma flotante es una forma de representar y realizar operaciones aritméticas sobre números reales en computación.

Es un tipo de datos numéricos que le permite manejar valores con partes fraccionarias y una amplia gama de magnitudes.

Los números de coma flotante son esenciales en la computación porque nos permiten trabajar con valores del mundo real que no son números enteros.

Muchos cálculos científicos, de ingeniería y financieros requieren una representación precisa de números decimales con diferentes niveles de precisión.

Un número de punto flotante es una forma de representar decimales o números extremadamente grandes usando una cantidad limitada de memoria.

Los números de punto flotante permiten un número distinto de dígitos después del punto decimal, mientras que los tipos de datos de punto fijo tienen un número determinado de dígitos reservado antes y después del punto decimal.

Por lo tanto, los tipos de datos de punto flotante pueden representar una mayor variedad de números que los tipos de datos de punto fijo.

Una operación se considera no válida cuando el cálculo no puede producir un valor numérico representable o cuando los operandos contienen valores especiales que no permiten obtener un resultado normal.

Not-a-Number (NaN): NaN se usa para representar operaciones no válidas (como infinity/infinity, infinity-infinity o la raíz cuadrada de -1).

Los naN permiten que un programa continúe después de una operación no válida.

Cómo se representan los números de punto flotante

Los números de coma flotante se representan típicamente usando un formato estandarizado conocido como el estándar de coma flotante Institute of Electrical and Electronics Engineers (IEEE).

Este estándar especifica cómo los números se codifican en formato binario, que consiste en un bit de signo, un exponente y un significando (también llamado mantisa).

El signo almacena el signo del número (positivo o negativo), el exponente almacena la potencia de 2 a la que se eleva o reduce el número (la potencia máxima/mínima de 2 es +1.023 y -1.022) y la mantisa almacena el número real.

La mantisa y el exponente se almacenan como componentes independientes.

Como resultado, la cantidad de precisión posible puede variar en función del tamaño del número (la mantisa) que se manipula.

Fracción es la parte fraccionaria normalizada del número, normalizado porque el exponente se ajusta para que el bit inicial siempre sea un 1.

De este modo, no tiene que almacenarse y se obtiene un poco más de precisión.

Este es el motivo por el que hay un bit implícito.

El sesgo es un valor utilizado para evitar tener que almacenar exponentes negativos.

El sesgo de los números de precisión simple es 127 y 1023 (decimal) para números de precisión doble.

En precisión simple, el exponente se sesga con 127 para evitar almacenar un signo negativo.

La computadora almacena m + 127 en lugar de m.

Por lo tanto, el valor máximo del exponente es 127 y el mínimo es −126.

En precisión doble, el exponente se sesga con 1023 para evitar almacenar un signo negativo.

La computadora almacena m + 1023 en lugar de m.

Precisión simple y precisión doble

Sí, hay diferentes tamaños de números de coma flotante.

Los tamaños más comunes son precisión simple (32 bits) y precisión doble (64 bits).

La precisión simple permite un mayor rango de números, mientras que la precisión doble proporciona una mayor precisión y un mayor rango.

TipoAlmacenamientoUso principal
single32 bitsMenor consumo de memoria
double64 bitsMayor precisión y rango

MATLAB® tiene tipos de datos para números de punto flotante de doble precisión (double) y precisión simple (single) de conformidad con el estándar 754 del IEEE®.

De forma predeterminada, MATLAB representa los números de punto flotante en formato de doble precisión.

La doble precisión permite representar números con mayor precisión, pero requiere más memoria que la precisión simple.

Para ahorrar memoria, puede convertir un número a precisión simple utilizando la función single.

El almacenamiento de un número double requiere 64 bits.

El almacenamiento de un número single requiere 32 bits.

FormatoSignoExponenteMantisa
double1 bit11 bits52 bits
single1 bit8 bits23 bits

Bits 63 almacena el signo, donde 0 es positivo y 1 es negativo.

Bits 62 a 52 almacena el exponente, sesgado por 1023.

Bits 51 a 0 almacena la mantisa.

Bits 31 almacena el signo, donde 0 es positivo y 1 es negativo.

Bits 30 a 23 almacena el exponente, sesgado por 127.

Bits 22 a 0 almacena la mantisa.

Por qué aparece el error en RokoBox

La causa exacta depende de la operación ejecutada por RokoBox, pero los problemas más habituales son errores de redondeo, cancelaciones, empantanamiento, conversiones intermedias, desbordamientos, subflujos y valores NaN o infinitos.

Casi todas las operaciones en MATLAB se realizan con operaciones aritméticas de doble precisión de conformidad con el estándar 754 del IEEE.

Dado que los ordenadores representan números con una precisión finita, algunos cálculos pueden generar resultados no intuitivos desde el punto de vista matemático.

Algunos problemas habituales que pueden surgir mientras se realizan cálculos con números de punto flotante son errores de redondeo, cancelaciones, empantanamiento y conversiones intermedias.

Los resultados inesperados no son bugs de MATLAB y se producen en cualquier software que utilice números de punto flotante.

El mismo principio puede afectar a RokoBox cuando sus cálculos internos reciben datos decimales, valores fuera de rango o resultados intermedios no representables.

Errores de redondeo

Un problema común es la precisión limitada de los números de coma flotante.

Dado que las computadoras tienen recursos finitos para almacenar y manipular números, ciertos cálculos pueden conducir a errores de redondeo.

Esto significa que el resultado de un cálculo puede no ser exactamente lo que esperas debido a la pérdida de precisión.

Los números de coma flotante no pueden representar con precisión todos los valores decimales debido a la precisión finita de su representación binaria.

Algunos números decimales, como fracciones simples como 1/3 o decimales recurrentes como 0.1, no pueden representarse con precisión en binario.

Estos números pueden dar lugar a errores de redondeo o aproximaciones cuando se almacenan y manipulan como valores de punto flotante.

Claro, digamos que tienes dos números de coma flotante, 0.1 y 0.2, y los sumas.

En aritmética decimal, la suma sería 0.3.

Sin embargo, debido a errores de redondeo en la aritmética de coma flotante, el resultado podría ser un número como 0.3004.

Por ejemplo, el número 4/3 no se puede representar de manera exacta como una fracción binaria.

De esta forma, este cálculo devuelve la cantidad eps(1) en lugar de 0.

De forma similar, dado que pi no es una representación exacta de π, sin(pi) no es exactamente cero.

Los errores de redondeo se observan mejor cuando se realizan muchas operaciones en números flotantes, lo que permite a los errores acumularse y agravarse.

Una práctica recomendada es minimizar el número de operaciones siempre que sea posible.

Para minimizar los errores de redondeo, es importante comprender las limitaciones de la aritmética de punto flotante y emplear técnicas como redondeo, truncamiento o el uso de precisión extendida cuando sea necesario.

representación IEEE 754 de punto flotante

Cancelación

La cancelación puede producirse cuando se resta un número de otro número de aproximadamente la misma magnitud, medida por eps.

Por ejemplo, eps(2^53) es 2, de modo que los números 2^53 + 1 y 2^53 tienen la misma representación de punto flotante.

Cuando sea posible, intente reescribir los cálculos en un formato equivalente que evite las cancelaciones.

Empantanamiento

El empantanamiento puede producirse cuando se realizan operaciones en números de punto flotante con una diferencia entre ellos de muchos órdenes de magnitud.

Por ejemplo, este cálculo muestra una pérdida de precisión que hace que la suma sea insignificante.

Conversiones intermedias

Cuando realiza operaciones aritméticas con diferentes tipos de datos, los cálculos y las conversiones intermedias pueden generar resultados inesperados.

Puede mezclar números de coma flotante con números enteros en los cálculos.

La mayoría de los lenguajes de programación proporcionan conversión implícita o explícita entre tipos de datos enteros y de coma flotante.

Cuando se realizan cálculos que implican valores de coma flotante y valores enteros, los números de coma flotante se promueven típicamente a la precisión apropiada, y los cálculos se llevan a cabo en consecuencia.

De forma similar, puede convertir un número de punto flotante a una precisión diferente.

Algunos lenguajes de programación y bibliotecas proporcionan funciones o métodos para convertir números de punto flotante entre diferentes precisiones, como la conversión de precisión simple a precisión doble o viceversa.

Por ejemplo, aunque x como y son 0.2, restarlos genera un resultado distinto de cero.

La razón es que y se convierte en primer lugar a double antes de realizar la resta.

-2.9802323e-09

Valores especiales que pueden provocar una operación no válida

Infinito positivo y negativo

Sí, hay valores especiales en la representación de coma flotante.

Dos valores especiales comúnmente encontrados son el infinito positivo y negativo, representados como "inf" y "-inf", respectivamente.

Estos valores se producen cuando los cálculos dan como resultado números que exceden el rango de valores representables.

A los números fuera del intervalo representable se les asigna infinito positivo o negativo.

A los números mayores que realmax o menores que -realmax se les asignan los valores de infinito positivo o negativo, respectivamente.

El infinito se produce cuando se divide por 0.

Excel no admite las infinidades, sino que proporciona una #DIV/0.

NaN

NaN representa un valor indefinido o no representable en cálculos con números de punto flotante.

Las operaciones infinity/infinity, infinity-infinity o la raíz cuadrada de -1 pueden producir NaN.

Los naN permiten que un programa continúe después de una operación no válida.

Excel genera inmediatamente un error como #NUM!

Si RokoBox muestra una operación de punto flotante no válida, es importante comprobar si alguno de los valores de entrada o de los resultados intermedios es NaN, inf o -inf.

Desbordamiento

Desbordamiento: el desbordamiento se produce cuando un número es demasiado grande para representarse.

Todos los equipos tienen un número máximo y un número mínimo que se puede controlar.

Dado que el número de bits de memoria en el que se almacena el número es finito, sigue que el número máximo o mínimo que se puede almacenar también es finito.

Los tipos de datos de doble precisión y de precisión simple tienen un valor más grande y más pequeño que se puede representar.

Puede almacenar números entre aproximadamente -3,4 × 1038 y 3,4 × 1038 utilizando la doble precisión o la precisión simple.

Si tiene números fuera de ese intervalo, almacénelos usando la doble precisión.

Subflujo

Subflujo: el subflujo se produce cuando se genera un número demasiado pequeño para representarse.

Los números desnormalizados son básicamente una solución alternativa para permitir que se almacenen números más pequeños que el límite inferior normal.

Un número desnormalizado se indica mediante un exponente de 0.

En ese caso, el número completo se almacena en la mantisa y la mantisa no empieza con un 1 implícito.

Como resultado, se pierde la precisión y el menor es el número, más precisión se pierde.

Microsoft no implementa esta parte opcional de la especificación porque los números desnormalizados por su propia naturaleza tienen un número variable de dígitos significativos.

Rango y precisión en MATLAB

MATLAB construye sus tipos de datos de punto flotante double y single de acuerdo con el formato del IEEE y sigue el modo de redondeo redondeo al más próximo con desempate al par de forma predeterminada.

Un número de punto flotante x tiene la forma.

s determina el signo.

f es la fracción, o mantisa, que cumple 0 ≤ f < 1.

es el exponente.

s, f y e están determinados cada uno por un número finito de bits en memoria, dependiendo f y e de la precisión del tipo de datos.

Busque los valores positivos más grandes y más pequeños que pueden representarse con el tipo de datos double usando las funciones realmax y realmin, respectivamente.

realmax y realmin devuelven valores normalizados del IEEE.

Puede encontrar los valores negativos más grandes y más pequeños multiplicando realmax y realmin por -1.

Busque los valores positivos más grandes y más pequeños que pueden representarse con el tipo de datos single llamando a las funciones realmax y realmin con el argumento "single".

Puede encontrar los valores negativos más grandes y más pequeños multiplicando realmax("single") y realmin("single") por -1.

Enteros consecutivos representables

No todos los enteros se pueden representar usando tipos de datos de punto flotante.

El entero consecutivo más grande, x, es el entero más grande para el que todos los enteros menores que o iguales a x pueden representarse de manera exacta, pero x + 1 no se puede representar en formato de punto flotante.

La función flintmax devuelve el entero consecutivo más grande.

Por ejemplo, busque el entero consecutivo más grande en formato de punto flotante de doble precisión, que es 253, usando la función flintmax.

Busque el entero consecutivo más grande en formato de punto flotante de precisión simple, que es 224.

La función flintmax devuelve el entero consecutivo más grande en formato de punto flotante.

9.007199254740992e+15

Cuando convierte un tipo de datos enteros a un tipo de datos de punto flotante, los enteros que no se pueden representar de manera exacta en formato de punto flotante pierden precisión.

flintmax, que es un número de punto flotante, es menor que el mayor entero que se puede representar por tipos de datos enteros usando el mismo número de bits.

Por ejemplo, flintmax para doble precisión es 253, mientras que el valor máximo para el tipo int64 es 264 - 1.

Por tanto, convertir un entero mayor que 253 a formato de doble precisión tiene como resultado una pérdida de precisión.

Cómo comprobar el problema

El primer paso consiste en identificar qué operación produce el valor no válido.

Conviene revisar por separado los operandos, las conversiones, los resultados intermedios y el resultado final.

También es necesario comprobar si los datos pertenecen a una escala compatible con la precisión utilizada.

Comprobar valores especiales

Compruebe si la entrada o el resultado contiene NaN, inf o -inf.

Estos valores pueden propagarse a través de operaciones posteriores y hacer que el error aparezca lejos de la operación que lo originó.

Comprobar el rango

Compare los valores con los límites representables por el tipo empleado.

Los números mayores que el límite superior pueden generar infinito positivo, mientras que los números menores que el límite inferior pueden generar infinito negativo o subflujo.

Comprobar la distancia entre valores

Puede determinar el tamaño de un vacío entre números de punto flotante consecutivos usando la función eps.

Por ejemplo, busque la distancia entre 5 y el siguiente número de doble precisión mayor.

No puede representar números entre 5 y 5 + eps(5) en formato de doble precisión.

Si un cálculo de doble precisión devuelve la respuesta 5, el resultado es preciso dentro de eps(5).

Este radio de precisión a menudo se llama épsilon de la máquina.

Los vacíos entre números de punto flotante no son iguales.

e = eps(x)

Los vacíos entre números de precisión simple son mayores que los vacíos entre números de doble precisión porque hay menos números de precisión simple.

Por lo tanto, los resultados de los cálculos de precisión simple son menos precisos que los resultados de los cálculos de doble precisión.

Cuando se convierte un número de doble precisión a un número de precisión simple, se puede determinar el límite superior para la cantidad a la que se redondea el número usando la función eps.

Por ejemplo, cuando convierte el número de doble precisión 3.14 a precisión simple, el número se redondea a eps(single(3.14)) como máximo.

Comparaciones incorrectas entre números

Sí, puedes realizar comparaciones con números de coma flotante.

Sin embargo, debido a errores de redondeo, las comparaciones directas de igualdad entre números de coma flotante pueden ser problemáticas.

PHP thinks that 1.6 (coming from a difference) is not equal to 1.6.

This happens probably because $x is not really 1.6, but 1.599999..

Para probar la igualdad de valores de números de punto flotante, se utiliza un límite superior del error relativo al redondeo.

Esto significa que no siempre conviene comprobar si dos resultados son exactamente iguales.

Es preferible comparar la diferencia absoluta o relativa con una tolerancia adecuada para la escala del problema.

Operaciones aritméticas y conversión de tipos

La aritmética de coma flotante funciona realizando operaciones en las representaciones codificadas de números de coma flotante.

Las operaciones aritméticas (suma, resta, multiplicación, división) consideran el exponente y el significado, aplicando reglas definidas por el estándar Institute of Electrical and Electronics Engineers (IEEE) para garantizar resultados precisos.

Puede usar un intervalo de tipos de datos en operaciones aritméticas con números de punto flotante, y el tipo de datos del resultado depende de los tipos de entrada.

Sin embargo, cuando realiza operaciones con diferentes tipos de datos, es posible que algunos cálculos no sean exactos debido a las aproximaciones o las conversiones intermedias.

Operandos de doble precisión

Puede realizar operaciones aritméticas básicas con double y cualquiera de los siguientes tipos de datos.

Si uno o más operandos son un escalar o un arreglo de enteros, el operando double debe ser un escalar.

El resultado es de tipo double, salvo cuando se especifique lo contrario.

  • single: el resultado es de tipo single.
  • double
  • int8, int16, int32, int64: el resultado tiene el mismo tipo de datos que el operando de enteros.
  • uint8, uint16, uint32, uint64: el resultado tiene el mismo tipo de datos que el operando de enteros.
  • char
  • logical

Operandos de precisión simple

Puede realizar operaciones aritméticas básicas con single y cualquiera de los siguientes tipos de datos.

El resultado es de tipo single.

  • single
  • double
  • char
  • logical

Casos especiales en Excel y otros programas

Microsoft Excel se diseñó en torno a la especificación IEEE 754 para determinar cómo almacena y calcula números de punto flotante.

IEEE es el Instituto de Ingenieros eléctricos y electrónicos, un organismo internacional que, entre otras cosas, determina los estándares de software informático y hardware.

La especificación 754 es una especificación ampliamente adoptada que describe cómo se deben almacenar los números de punto flotante en un equipo binario.

Es popular porque permite almacenar números de punto flotante en una cantidad razonable de espacio y cálculos para que se produzcan relativamente rápidamente.

En el caso de Excel, aunque Excel puede almacenar números de 1.79769313486232E308 a 2.2250738585072E-308, solo puede hacerlo en 15 dígitos de precisión.

Esta limitación es un resultado directo de seguir estrictamente la especificación IEEE 754 y no es una limitación de Excel.

La especificación IEEE 754 no otorga ninguna asignación especial para ningún número.

Almacena todo lo que puede en la mantisa y trunca el resto.

Incluso las fracciones decimales comunes, como decimal 0,0001, no se pueden representar exactamente en binario.

Otro problema confuso que afecta al almacenamiento de números de punto flotante en formato binario es que algunos números que son finitos y no repetitivos en la base decimal 10 son infinitos y repetitivos en binario.

El ejemplo más común de esto es el valor 0,1 y sus variaciones.

Esto imprimirá 0,9999999999999999996 como salida.

En lugar de mostrar 0,9, Excel muestra 0,89999999999999999999999.

Sin embargo, Excel 97 introdujo una optimización que intenta corregir este problema.

Si una operación de suma o resta da como resultado un valor en o muy cerca de cero, Excel 97 y versiones posteriores compensará cualquier error introducido como resultado de convertir un operando a y desde binario.

Cómo evitar el error de punto flotante en RokoBox

Usar doble precisión cuando sea necesario

La precisión doble proporciona una mayor precisión y un mayor rango.

Los vacíos entre números de precisión simple son mayores que los vacíos entre números de doble precisión porque hay menos números de precisión simple.

Por lo tanto, los resultados de los cálculos de precisión simple son menos precisos que los resultados de los cálculos de doble precisión.

Si tiene números fuera del intervalo de precisión simple, almacénelos usando la doble precisión.

Redondear los resultados

Para minimizar los errores de redondeo, es importante comprender las limitaciones de la aritmética de punto flotante y emplear técnicas como redondeo, truncamiento o el uso de precisión extendida cuando sea necesario.

En algunos casos, es posible que pueda evitar que los errores de redondeo afecten a tu trabajo mediante la opción Precisión como se muestra.

Esta opción obliga al valor de cada número de la hoja de cálculo a ser el valor mostrado.

Por ejemplo, si elige un formato numérico que muestra dos posiciones decimales y, a continuación, activa la opción Precisión como mostrada, se pierde toda la precisión más allá de dos posiciones decimales al guardar el libro.

Esta opción afecta al libro activo, incluidas todas las hojas de cálculo.

No puede deshacer esta opción y recuperar los datos perdidos.

Evitar operaciones innecesarias

Los errores de redondeo se observan mejor cuando se realizan muchas operaciones en números flotantes, lo que permite a los errores acumularse y agravarse.

Una práctica recomendada es minimizar el número de operaciones siempre que sea posible.

Cuando sea posible, intente reescribir los cálculos en un formato equivalente que evite las cancelaciones.

Controlar las conversiones

Es posible convertir un número de coma flotante a una precisión diferente.

Sin embargo, al convertir un número de doble precisión a un número de precisión simple, se puede perder información debido a los vacíos más grandes entre valores single.

Cuando convierte un tipo de datos enteros a un tipo de datos de punto flotante, los enteros que no se pueden representar de manera exacta en formato de punto flotante pierden precisión.

Si se requiere una conversión, conviene realizarla en un punto controlado y comprobar el resultado.

Usar enteros para importes monetarios

General computing hint: If you're keeping track of money, do yourself and your users the favor of handling everything internally in cents and do as much math as you can in integers.

Store values in cents if at all possible.

Add and subtract in cents.

Esta estrategia evita que los importes dependan directamente de aproximaciones binarias de números decimales.

Validar entradas antes del cálculo

Antes de ejecutar una operación en RokoBox, compruebe que los datos no estén vacíos, que sean numéricos y que se encuentren dentro del rango esperado.

También es importante verificar divisores, raíces, logaritmos, exponentes y valores procedentes de conversiones externas.

Problemas al mezclar datos de sistemas externos

En la comunicación Modbus, los datos se almacenan en registros, y cada registro tiene una longitud de 16 bits.

Sin embargo, para representar un número de punto flotante de precisión simple se requieren 32 bits.

Para manejar esto dentro de la arquitectura Modbus, los datos que superan los 16 bits deben abarcar varias direcciones de registro consecutivas.

El protocolo Modbus especifica el uso del formato Big-Endian para la transmisión de valores multibyte.

En el orden Big-Endian, el byte más significativo se transmite primero.

Si RokoBox recibe un valor de punto flotante desde Modbus, una interpretación incorrecta del orden de bytes o de registros puede transformar un número válido en un valor extremadamente grande, extremadamente pequeño, NaN o infinito.

Por esa razón, además de comprobar la fórmula, hay que comprobar el formato de transmisión, el orden de los registros, el tipo single o double y la escala aplicada a los datos.

mapa de registros Modbus y bytes Big-Endian

Comentando IEEE 754 y sus errores principales

Álgebra lineal y cálculos inestables

Los problemas habituales en las operaciones aritméticas, como los descritos anteriormente, pueden agravarse cuando se aplican a problemas de álgebra lineal porque los cálculos relacionados constan normalmente de varios pasos.

x = A\b;

Warning: Matrix is close to singular or badly scaled. Results may be inaccurate.

Una matriz casi singular o mal escalada puede producir resultados inestables aunque todos los valores de entrada parezcan válidos.

En este caso, el problema no necesariamente está en una sola operación, sino en la acumulación de aproximaciones durante varios pasos.

La representación de coma flotante puede afectar la precisión de las funciones matemáticas debido a errores de redondeo y la precisión limitada de los números de coma flotante.

Las operaciones matemáticas comunes como las funciones trigonométricas, los logaritmos y la exponenciación pueden introducir pequeños errores en el resultado, especialmente para cálculos extremos o complejos.

Conversión de números de punto flotante a enteros

Sí, puedes convertir números de coma flotante en números enteros.

La mayoría de los lenguajes de programación proporcionan funciones o métodos para convertir números de coma flotante en números enteros, lo que le permite extraer la parte del número entero y descartar la parte fraccionaria.

La conversión puede ser segura cuando la parte fraccionaria no es relevante y el valor está dentro del rango del tipo entero.

Sin embargo, convertir primero un valor aproximado a entero puede producir un resultado inesperado si el valor almacenado es ligeramente menor que el valor decimal visible.

Al realizar una conversión, también debe comprobarse el redondeo, el truncamiento y el rango máximo del tipo entero.

Precisión en PHP y generación de código

PHP utiliza el formato de precisión decimal IEEE 754, que dará un error relativo máximo del orden de 1.11e-16 (debido a los redondeos).

Los números de punto flotante tienen una precisión limitada.

Los números no pueden ser convertidos sin una pequeña pérdida de precisión.

Be careful when using float values in strings that are used as code later, for example when generating JavaScript code or SQL statements.

The float is actually formatted according to the browser's locale setting, which means that "0.23" will result in "0,23".

This would result in a different result for users with some locales.

JavaScript won't state an error, additional arguments are discarded without notice, but the function doBar(a) would get 0 as parameter.

Similar problems could arise anywhere else (SQL, any string used as code somewhere else).

Por eso, los valores recibidos o calculados por RokoBox deben conservar un formato numérico explícito antes de incorporarse a cadenas, consultas o instrucciones de otros sistemas.

Lista de comprobación para solucionar el error

  1. Identifique la operación exacta que produce el mensaje.
  2. Compruebe si alguno de los operandos contiene NaN, inf o -inf.
  3. Revise si existe una división por cero.
  4. Compruebe si una raíz, un logaritmo o una función matemática recibe un argumento no válido.
  5. Compare los valores con el rango representable del tipo single o double.
  6. Compruebe si se produjo desbordamiento o subflujo.
  7. Revise las conversiones entre enteros, single y double.
  8. Utilice eps para estimar la separación entre valores representables.
  9. Evite comparar directamente la igualdad de dos resultados de punto flotante.
  10. Utilice una tolerancia absoluta o relativa apropiada.
  11. Reduzca el número de operaciones consecutivas cuando sea posible.
  12. Reescriba las fórmulas para evitar cancelaciones.
  13. Use enteros para cantidades monetarias siempre que sea posible.
  14. Compruebe el orden Big-Endian y la distribución de registros cuando los datos procedan de Modbus.
  15. Verifique la escala, las unidades y el tipo numérico configurado en RokoBox.
  16. Compruebe si una matriz está casi singular o mal escalada.

La operación de punto flotante no válida en RokoBox no debe interpretarse automáticamente como un fallo del programa.

Los resultados inesperados no son bugs de MATLAB y se producen en cualquier software que utilice números de punto flotante.

La causa puede encontrarse en la precisión finita, en la representación binaria de los decimales, en el rango limitado, en una operación matemática no definida, en una conversión intermedia o en la interpretación incorrecta de datos externos.

tags: #operacion #de #punto #flotante #no #valido