diff --git a/docs/ru/data_types/float.md b/docs/ru/data_types/float.md index 2fed77f7254..f3e93e033a5 100644 --- a/docs/ru/data_types/float.md +++ b/docs/ru/data_types/float.md @@ -1,7 +1,60 @@ -Float32, Float64 ----------------- +# Float32, Float64 -Числа с плавающей запятой, то же, что и float, double в языке C. -В отличие от стандартного SQL, числа с плавающей запятой поддерживают inf, -inf, а также nan-ы. -Смотрите замечание о сортировке nan-ов в разделе "Секция ORDER BY". -Не рекомендуется хранить числа с плавающей запятой в таблицах. +[Числа с плавающей точкой](https://en.wikipedia.org/wiki/IEEE_754). + +Типы эквивалентны типам языка С: +- `Float32` - `float`; +- `Float64` - `double`. + +Из соображений производительности рекомендуем хранить данные в целочисленноми виде всегда, когда это возможно. Например, переводите в целочисленные значения числа с фиксированной точностью, такие как денежные суммы или времена загрузки страниц в миллисекундах. + +## Особенности использования чисел с плавающей точкой + +- При переводе из строки в число с плавающей точкой возможна ошибка округления. + + ```sql + SELECT 1 - 0.9 + ``` + + ``` + ┌───────minus(1, 0.9)─┐ + │ 0.09999999999999998 │ + └─────────────────────┘ + ``` + По этой причине могут некорректно работать операции сравнения вычислений. + +- Результат вычисления зависит от метода вычисления (типа процессора и архитектуры вычислительной системы). +- При вычислениях с плавающей точкой возможно появление таких категорий числа как бесконечность (`Inf`) и "не число" (`NaN`). Это необходимо учитывать при обработке результатов вычислений. + +## NaN и Inf + +В отличие от стандартного SQL, ClickHouse поддерживает следующие категории чисел с плавающей точкой: + +- `Inf` - бесконечность. + ```sql + SELECT 0.5 / 0 + ``` + ``` + ┌─divide(0.5, 0)─┐ + │ inf │ + └────────────────┘ + ``` +- `-Inf` - отрицательная бесконечность; + ```sql + SELECT -0.5 / 0 + ``` + ``` + ┌─divide(-0.5, 0)─┐ + │ -inf │ + └─────────────────┘ + ``` +- `NaN` - не число. + ``` + SELECT 0 / 0 + ``` + ``` + ┌─divide(0, 0)─┐ + │ nan │ + └──────────────┘ + ``` + Смотрите правила сортировки `NaN` в разделе [Секция ORDER BY](../query_language/queries.md#query_language-queries-order_by). diff --git a/docs/ru/query_language/queries.md b/docs/ru/query_language/queries.md index dc6b3fa1278..79bf2afbdbc 100644 --- a/docs/ru/query_language/queries.md +++ b/docs/ru/query_language/queries.md @@ -1192,6 +1192,8 @@ LIMIT 100 WHERE и HAVING отличаются тем, что WHERE выполняется до агрегации (GROUP BY), а HAVING - после. Если агрегации не производится, то HAVING использовать нельзя. + + Секция ORDER BY ---------------