fixed previous commit, added test for EXR, added test for EXP+EXR with divider
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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", ""},
|
||||
|
||||
Reference in New Issue
Block a user