From ce6e02cec3a06d991e112f0f875123f1d1f928dc Mon Sep 17 00:00:00 2001
From: Eric Kunze <eric.kunze@arm.com>
Date: Fri, 11 Mar 2022 15:12:38 -0800
Subject: Update floating point edge cases

Cover cases where NaN, +/- 0, +/- infinity are involved

Signed-off-by: Eric Kunze <eric.kunze@arm.com>
Change-Id: I1a5a23c7b856ddb997f7cdc00282420294ef3e6d
---
 chapters/comparison.adoc | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

(limited to 'chapters/comparison.adoc')

diff --git a/chapters/comparison.adoc b/chapters/comparison.adoc
index ad574fb..67f3506 100644
--- a/chapters/comparison.adoc
+++ b/chapters/comparison.adoc
@@ -1,7 +1,7 @@
 //
 // This confidential and proprietary software may be used only as
 // authorised by a licensing agreement from ARM Limited
-// (C) COPYRIGHT 2020-2021 ARM Limited
+// (C) COPYRIGHT 2020-2022 ARM Limited
 // ALL RIGHTS RESERVED
 // The entire notice above must be reproduced on all authorised
 // copies and copies may only be made to the extent permitted
@@ -32,7 +32,11 @@ for_each(index in shape) {
     index2 = apply_broadcast(shape, shape2, index);
     in_t value1 = tensor_read<in_t>(input1, shape1, index1);
     in_t value2 = tensor_read<in_t>(input2, shape2, index2);
-    out_t result = (value1 == value2) ? True : False;
+    out_t result;
+    if (isNaN(value1) || isNaN(value2))
+        result = False;
+    else
+        result = (value1 == value2) ? True : False;
     tensor_write<out_t>(output, shape, index, result);
 }
 ----
@@ -69,7 +73,11 @@ for_each(index in shape) {
     index2 = apply_broadcast(shape, shape2, index);
     in_t value1 = tensor_read<in_t>(input1, shape1, index1);
     in_t value2 = tensor_read<in_t>(input2, shape2, index2);
-    out_t result = (value1 > value2) ? True : False;
+    out_t result;
+    if (isNaN(value1) || isNaN(value2))
+        result = False;
+    else
+        result = (value1 > value2) ? True : False;
     tensor_write<out_t>(output, shape, index, result);
 }
 ----
@@ -105,7 +113,11 @@ for_each(index in shape) {
     index2 = apply_broadcast(shape, shape2, index);
     in_t value1 = tensor_read<in_t>(input1, shape1, index1);
     in_t value2 = tensor_read<in_t>(input2, shape2, index2);
-    out_t result = (value1 >= value2) ? True : False;
+    out_t result;
+    if (isNaN(value1) || isNaN(value2))
+        result = False;
+    else
+        result = (value1 >= value2) ? True : False;
     tensor_write<out_t>(output, shape, index, result);
 }
 ----
-- 
cgit v1.2.1

