• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "math_data_test.h"
2 
ConvertDoubleToBiased(const double & value)3 uint64_t ConvertDoubleToBiased(const double& value)
4 {
5     DoubleShape u;
6     u.value = value;
7     if (u.bits.sign) {
8         return ~u.sign_magnitude + 1;
9     } else {
10         u.bits.sign = 1;
11         return u.sign_magnitude;
12     }
13 }
14 
DoubleUlpCmp(double expected,double actual,uint64_t ulp)15 bool DoubleUlpCmp(double expected, double actual, uint64_t ulp)
16 {
17     if (!isnan(expected) && !isnan(actual)) {
18         uint64_t value_diff = ConvertDoubleToBiased(expected) >= ConvertDoubleToBiased(actual) ?
19         (ConvertDoubleToBiased(expected) - ConvertDoubleToBiased(actual)) :
20         (ConvertDoubleToBiased(actual) - ConvertDoubleToBiased(expected));
21         return value_diff <= ulp;
22     }
23     return false;
24 }
25 
ConvertFloatToBiased(const float & value)26 uint32_t ConvertFloatToBiased(const float& value)
27 {
28     FloatShape u;
29     u.value = value;
30     if (u.bits.sign) {
31         return ~u.sign_magnitude + 1;
32     } else {
33         u.bits.sign = 1;
34         return u.sign_magnitude;
35     }
36 }
FloatUlpCmp(float expected,float actual,uint32_t ulp)37 bool FloatUlpCmp(float expected, float actual, uint32_t ulp)
38 {
39     if (!isnan(expected) && !isnan(actual)) {
40         uint32_t value_diff = ConvertFloatToBiased(expected) >= ConvertFloatToBiased(actual) ?
41         (ConvertFloatToBiased(expected) - ConvertFloatToBiased(actual)) :
42         (ConvertFloatToBiased(actual) - ConvertFloatToBiased(expected));
43         return value_diff <= ulp;
44     }
45     return false;
46 }