| 376 | } |
| 377 | |
| 378 | optional<std::pair<FLBA, FLBA>> CleanFloat16Statistic(std::pair<FLBA, FLBA> min_max) { |
| 379 | FLBA min_flba = min_max.first; |
| 380 | FLBA max_flba = min_max.second; |
| 381 | Float16 min = Float16::FromLittleEndian(min_flba.ptr); |
| 382 | Float16 max = Float16::FromLittleEndian(max_flba.ptr); |
| 383 | |
| 384 | if (min.is_nan() || max.is_nan()) { |
| 385 | return ::std::nullopt; |
| 386 | } |
| 387 | |
| 388 | if (min == std::numeric_limits<Float16>::max() && |
| 389 | max == std::numeric_limits<Float16>::lowest()) { |
| 390 | return ::std::nullopt; |
| 391 | } |
| 392 | |
| 393 | if (min.is_zero() && !min.signbit()) { |
| 394 | min_flba = FLBA{Float16Constants::negative_zero()}; |
| 395 | } |
| 396 | if (max.is_zero() && max.signbit()) { |
| 397 | max_flba = FLBA{Float16Constants::positive_zero()}; |
| 398 | } |
| 399 | |
| 400 | return {{min_flba, max_flba}}; |
| 401 | } |
| 402 | |
| 403 | optional<std::pair<FLBA, FLBA>> CleanStatistic(std::pair<FLBA, FLBA> min_max, |
| 404 | LogicalType::Type::type logical_type) { |
no test coverage detected