MulOverflow
Function Usage
Determines whether overflow occurs when two numeric values are multiplied. If no overflow occurs, it returns the correct computation result.
Prototype
template<typename TLhs, typename TRhs, typename TRet>
bool MulOverflow(TLhs lhs, TRhs rhs, TRet &ret)
Parameters
Parameter |
Description |
|---|---|
TLhs |
Data type of the left operand for the multiplication operation. |
TRhs |
Data type of the right operand for the multiplication operation. |
TRet |
Data type of the multiplication operation result. |
Parameter |
Input/Output |
Description |
|---|---|---|
lhs |
Input |
Left operand of the multiplication operation. |
rhs |
Input |
Right operand of the multiplication operation. |
ret |
Input |
Multiplication result of the left and right operands. The result is valid only when the function return value is true. |
Returns
The value true indicates that the computation fails and the return value of ret is invalid. The value false indicates that the computation is successful and the return value of ret is valid.
Constraints
None
Examples
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ge::DataType out_data_type = ge::DT_FLOAT; GE_ASSERT_GRAPH_SUCCESS(GetOutputDataType(context, out_data_type), "get data type failed"); GE_ASSERT_TRUE(out_data_type == ge::DataType::DT_INT32 || out_data_type == ge::DataType::DT_INT64, "only support DT_INT32 and DT_INT64, but out_data_type is %s", ge::TypeUtils::DataTypeToSerialString(out_data_type).c_str()); const auto is_malloc = (out_data_type == ge::DataType::DT_INT32); const auto data_type_size = ge::GetSizeByDataType(out_data_type); if (data_type_size <= 0) { // Error reported } size_t malloc_buffer_size = 0U; if (ge::MulOverflow(static_cast<size_t>(data_type_size), Shape::kMaxDimNum, malloc_buffer_size)) { // Error reported } if (ge::AddOverflow(malloc_buffer_size, sizeof(GertTensorData), malloc_buffer_size)) { // Error reported } |