posit32::mulAdd
Not sure is it bug, but sometimes posit32 and quire32 mulAdd
give not expected results:
#include "softposit_cpp.h"
int main(int argc, char *argv[]){
double x64 = 0.7238940224051476;
double y64 = 0.7499544434249401;
double z64 = 0.4307889733463526;
posit32 x = x64;
posit32 y = y64;
posit32 z = z64;
posit32 answer = fma(x, y, z);
double expected = x64*y64+z64;
posit32 nearest = expected;
printf("answer = %.15f\n", answer.toDouble()); // 0.973676513880491
printf("expected = %.15f\n", expected); // 0.973676512017846
printf("nearest = %.15f\n\n", nearest.toDouble()); // 0.973676510155201
x64 = 0.85137939453125;
y64 = 0.5221405029296875;
z64 = 0.3205278404057026;
x = x64;
y = y64;
z = z64;
answer = fma(x, y, z);
expected = x64*y64+z64;
nearest = expected;
printf("answer = %.15f\n", answer.toDouble()); // 0.765067502856255 (1010677612)
printf("expected = %.15f\n", expected); // 0.765067505650222
printf("nearest = %.15f\n\n", nearest.toDouble()); // 0.765067506581545 (1010677613)
return 0;
}
Edited by Andrey Zgarbul