aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Ge <jerry.ge@arm.com>2022-11-09 14:30:59 -0800
committerEric Kunze <eric.kunze@arm.com>2022-11-19 01:11:04 +0000
commita633bc61b156f3a4a2cd9f313a738ace459befc1 (patch)
treebfd65f79d9936f1d5ab442ae434908fe702f7bd4
parente4b08ffbe457c8932740e3171964cf2e7cd69b4f (diff)
downloadreference_model-a633bc61b156f3a4a2cd9f313a738ace459befc1.tar.gz
Fix the floating point precision issue for Sigmoid FP32
The original calculation was auto-promoted to FP64 and causing the discrepencies between TFL and TOSA. Sigmoid is now calculated with only single precision floating point values. Signed-off-by: Jerry Ge <jerry.ge@arm.com> Change-Id: Ia65b491ccf8af2493cc01ca66c28faff841407c2
-rw-r--r--reference_model/src/ops/activation_funcs.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/reference_model/src/ops/activation_funcs.cc b/reference_model/src/ops/activation_funcs.cc
index 46234e2..09ef6f6 100644
--- a/reference_model/src/ops/activation_funcs.cc
+++ b/reference_model/src/ops/activation_funcs.cc
@@ -63,7 +63,9 @@ int OpSigmoid<Rank, Dtype>::register_fcn()
case DType_FP16:
case DType_BF16:
case DType_FP32:
- this->fcn = [](InEigenType a) -> OutEigenType { return fpTrunc<Dtype>(1.0 / (1.0 + (expf(-1.0 * a)))); };
+ this->fcn = [](InEigenType a) -> OutEigenType {
+ return fpTrunc<Dtype>(1.f / (1.f + (expf(-1.f * a))));
+ };
break;
default:
ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]);