Si necesitas cálculos precisos, especialmente si trabajas con datos financieros o empresariales que requieren una alta precisión, deberías considerar usar Decimal en su lugar.Los números de coma flotante pueden dar lugar a resultados imprecisos, como se muestra a continuación:
Float32—float.Float64—double.
Float32—FLOAT,REAL,SINGLE.Float64—DOUBLE,DOUBLE PRECISION.
FLOAT(12), FLOAT(15, 22), DOUBLE(12), DOUBLE(4, 18)), pero ClickHouse los ignora.
Uso de números de coma flotante
- Los cálculos con números de coma flotante pueden producir errores de redondeo.
- El resultado del cálculo depende del método de cálculo (el tipo de procesador y la arquitectura del sistema).
- Los cálculos en coma flotante pueden dar lugar a valores como infinito (
Inf) y “no es un número” (NaN). Esto debe tenerse en cuenta al procesar los resultados de los cálculos. - Al interpretar números de coma flotante a partir de texto, es posible que el resultado no sea el número representable por la máquina más cercano.
NaN e Inf
Inf– Infinito.
-Inf— Infinito negativo.
NaN— No es un número.
NaN en la sección cláusula ORDER BY.
Valores NaN en la semántica de conjuntos
NaN de modo que la comparación escalar NaN = NaN devuelve false.
ClickHouse sigue esa regla para el operador =.
Sin embargo, NaN no es un único valor; es cualquier patrón de bits cuyo exponente está compuesto solo por unos y cuya
mantisa no es cero. Distintas operaciones y distintas arquitecturas de CPU pueden producir valores NaN
con diferentes bits de signo o diferentes contenidos en la mantisa. Por ejemplo:
0./0.produce unNaNcuyo bit de signo es 1 en la mayoría de las plataformas x86.- El literal
nanproduce unNaNcuyo bit de signo es 0. - Después de PR #98230, la ruta NEON de AArch64 para
logdevuelve unNaNcuyo bit de signo difiere dellogescalar de glibc con entradas negativas.
NaN se asignan mediante hash a
distintas cubetas y se tratan como valores distintos en operaciones con semántica de conjuntos, incluidas
DISTINCT, GROUP BY, uniqExact, countDistinct y equi-JOIN sobre una clave Float:
NaN es distinto de cualquier otro valor, incluido él mismo),
pero puede resultar sorprendente. Si necesita que las operaciones con semántica de conjuntos traten todos los valores NaN como iguales,
llévelos a una forma canónica en la consulta:
DISTINCT, GROUP BY y JOIN.
BFloat16
BFloat16 es un tipo de dato de coma flotante de 16 bits con exponente de 8 bits, bit de signo y mantisa de 7 bits.
Es útil para aplicaciones de aprendizaje automático e IA.
ClickHouse admite conversiones entre Float32 y BFloat16, que
pueden realizarse mediante las funciones toFloat32() o toBFloat16.
La mayoría de las demás operaciones no son compatibles.