ClickHouse와 C에서 대응되는 타입은 다음과 같습니다.
Float32—float.Float64—double.
Float32—FLOAT,REAL,SINGLE.Float64—DOUBLE,DOUBLE PRECISION.
FLOAT(12), FLOAT(15, 22), DOUBLE(12), DOUBLE(4, 18)), ClickHouse는 이를 무시합니다.
부동소수점 수 사용
- 부동소수점 수를 사용한 계산에서는 반올림 오류가 발생할 수 있습니다.
- 계산 결과는 계산 방식(컴퓨터 시스템의 프로세서 유형과 아키텍처)에 따라 달라집니다.
- 부동소수점 계산에서는 무한대(
Inf) 및 “숫자가 아님”(NaN)과 같은 값이 나올 수 있습니다. 계산 결과를 처리할 때는 이 점을 고려해야 합니다. - 텍스트에서 부동소수점 수를 파싱할 때, 결과가 기계에서 표현 가능한 가장 가까운 숫자가 아닐 수 있습니다.
NaN 및 Inf
Inf– 무한대입니다.
-Inf— 음의 무한대입니다.
NaN— 숫자가 아닙니다.
NaN 정렬 규칙을 확인하십시오.
집합 의미론에서의 NaN 값
NaN = NaN의 결과가 false가 되도록 NaN을 정의합니다.
ClickHouse도 = 연산자에서 이 규칙을 따릅니다.
하지만 NaN은 단일한 값이 아닙니다. 지수부가 모두 1이고
가수가 0이 아닌 모든 비트 패턴이 NaN에 해당합니다. 연산 방식이나 CPU 아키텍처에 따라
부호 비트가 다르거나 가수 payload가 다른 NaN
값이 생성될 수 있습니다. 예시는 다음과 같습니다.
0./0.은 대부분의 x86 플랫폼에서 부호 비트가 1인NaN을 생성합니다.- 리터럴
nan은 부호 비트가 0인NaN을 생성합니다. - PR #98230 이후 AArch64 NEON 경로의
log는 음수 입력에 대해 glibc의 스칼라log와 부호 비트가 다른NaN을 반환합니다.
NaN 비트 패턴은
서로 다른 버킷으로 해시되며 DISTINCT, GROUP BY, uniqExact, countDistinct,
그리고 Float 키에 대한 등가 JOIN을 포함한 집합 의미론 연산에서 서로 다른 값으로 처리됩니다.
NaN은 자기 자신을 포함한 다른 모든 값과 같지 않음).
하지만 다소 의외일 수 있습니다. 집합 의미론 연산에서 모든 NaN 값을 동일하게 처리해야 한다면,
쿼리에서 이를 정규화하십시오:
DISTINCT, GROUP BY, JOIN 키에도 적용됩니다.
BFloat16
BFloat16은 8비트 지수부, 1비트 부호, 7비트 가수로 구성된 16비트 부동소수점 데이터 타입입니다.
머신 러닝 및 AI 애플리케이션에 유용합니다.
ClickHouse는 Float32와 BFloat16 간의 변환을 지원하며,
이 변환은 toFloat32() 또는 toBFloat16 함수를 사용해 수행할 수 있습니다.
대부분의 다른 연산은 지원되지 않습니다.