| 495 | } |
| 496 | |
| 497 | Status IntegerScalarToFloat32Safe(PyObject* obj, float* out) { |
| 498 | int64_t value = 0; |
| 499 | RETURN_NOT_OK(UnboxIntegerAsInt64(obj, &value)); |
| 500 | |
| 501 | constexpr int64_t kFloatMax = 1LL << 24; |
| 502 | constexpr int64_t kFloatMin = -(1LL << 24); |
| 503 | |
| 504 | if (value < kFloatMin || value > kFloatMax) { |
| 505 | return Status::Invalid("Integer value ", value, " is outside of the range exactly", |
| 506 | " representable by a IEEE 754 single precision value"); |
| 507 | } |
| 508 | *out = static_cast<float>(value); |
| 509 | return Status::OK(); |
| 510 | } |
| 511 | |
| 512 | void DebugPrint(PyObject* obj) { |
| 513 | std::string repr = PyObject_StdStringRepr(obj); |
no test coverage detected