Browse Source

support divide zero of RealDiv

tags/v1.1.0
wuxuejian 5 years ago
parent
commit
2acd4637e1
1 changed files with 14 additions and 4 deletions
  1. +14
    -4
      mindspore/ccsrc/backend/kernel_compiler/cpu/arithmetic_cpu_kernel.cc

+ 14
- 4
mindspore/ccsrc/backend/kernel_compiler/cpu/arithmetic_cpu_kernel.cc View File

@@ -57,11 +57,21 @@ void ArithmeticCPUKernel::RealDiv(const T *input1, const T *input2, T *out, size
for (size_t i = start; i < end; i++) {
std::vector<size_t> idx;
GenIndex(i, &idx);
auto div_number = input2[idx[1]];
if (div_number == 0) {
MS_LOG(EXCEPTION) << "Cannot divided by 0!";
auto dividend = input1[idx[0]];
auto divisor = input2[idx[1]];
if (divisor == 0) {
if (dividend == 0) {
out[i] = std::numeric_limits<T>::quiet_NaN();
continue;
}
if (std::numeric_limits<T>::has_infinity) {
out[i] = dividend > 0 ? std::numeric_limits<T>::infinity() : -std::numeric_limits<T>::infinity();
} else {
out[i] = dividend > 0 ? std::numeric_limits<T>::max() : std::numeric_limits<T>::min();
}
continue;
}
out[i] = input1[idx[0]] / div_number;
out[i] = dividend / divisor;
}
}



Loading…
Cancel
Save