fixed previous commit, added test for EXR, added test for EXP+EXR with divider

This commit is contained in:
john30
2016-02-20 14:30:23 +01:00
parent 1ea663b854
commit 6983ea0aee
2 changed files with 18 additions and 3 deletions
+9 -3
View File
@@ -1119,6 +1119,8 @@ result_t NumberDataField::readSymbols(SymbolString& input, const unsigned char b
# if HAVE_DIRECT_FLOAT_FORMAT == 2
value = __builtin_bswap32(value);
# endif
unsigned char* pval = (unsigned char*)&value;
val = *((float*)pval);
#else
int exp = (value >> 23) & 0xff; // 8 bits, signed
if (exp == 0) {
@@ -1130,15 +1132,15 @@ result_t NumberDataField::readSymbols(SymbolString& input, const unsigned char b
if (negative) {
val = -val;
}
}
#endif
if (val != 0.0) {
if (m_divisor < 0) {
val *= (float)-m_divisor;
} else if (m_divisor > 1) {
val /= (float)m_divisor;
}
}
#endif
unsigned char* pval = (unsigned char*)&value;
val = *((float*)pval);
if (m_precision != 0)
output << fixed << setprecision(m_precision+6);
else if (val == 0)
@@ -1201,6 +1203,10 @@ result_t NumberDataField::writeSymbols(istringstream& input,
if (strEnd == NULL || strEnd == str || *strEnd != 0) {
return RESULT_ERR_INVALID_NUM; // invalid value
}
if (m_divisor < 0)
dvalue /= -m_divisor;
else if (m_divisor > 1)
dvalue *= m_divisor;
#ifdef HAVE_DIRECT_FLOAT_FORMAT
float val = (float)dvalue;
unsigned char* pval = (unsigned char*)&val;
+9
View File
@@ -286,6 +286,15 @@ int main()
{"x,,exp", "-0.001", "10feffff046f1283ba", "00", ""},
{"x,,exp", "-", "10feffff040000807f", "00", ""},
{"x,,exp","-32.767", "10feffff04681103c2", "00", ""},
{"x,,exp,1000", "-0.000090000", "10feffff04ec51b8bd", "00", ""},
{"x,,exp,-100", "-9", "10feffff04ec51b8bd", "00", ""},
{"x,,exr", "-0.09", "10feffff04bdb851ec", "00", ""},
{"x,,exr", "0.0", "10feffff0400000000", "00", ""},
{"x,,exr", "-0.001", "10feffff04ba83126f", "00", ""},
{"x,,exr", "-", "10feffff047f800000", "00", ""},
{"x,,exr","-32.767", "10feffff04c2031168", "00", ""},
{"x,,exr,1000", "-0.000090000", "10feffff04bdb851ec", "00", ""},
{"x,,exr,-100", "-9", "10feffff04bdb851ec", "00", ""},
{"x,,d2b", "18.004", "10fe0700090112", "00", ""},
{"x,,d2b", "0.000", "10feffff020000", "00", ""},
{"x,,d2b", "-0.004", "10feffff02ffff", "00", ""},