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
|
# if HAVE_DIRECT_FLOAT_FORMAT == 2
|
||||||
value = __builtin_bswap32(value);
|
value = __builtin_bswap32(value);
|
||||||
# endif
|
# endif
|
||||||
|
unsigned char* pval = (unsigned char*)&value;
|
||||||
|
val = *((float*)pval);
|
||||||
#else
|
#else
|
||||||
int exp = (value >> 23) & 0xff; // 8 bits, signed
|
int exp = (value >> 23) & 0xff; // 8 bits, signed
|
||||||
if (exp == 0) {
|
if (exp == 0) {
|
||||||
@@ -1130,15 +1132,15 @@ result_t NumberDataField::readSymbols(SymbolString& input, const unsigned char b
|
|||||||
if (negative) {
|
if (negative) {
|
||||||
val = -val;
|
val = -val;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (val != 0.0) {
|
||||||
if (m_divisor < 0) {
|
if (m_divisor < 0) {
|
||||||
val *= (float)-m_divisor;
|
val *= (float)-m_divisor;
|
||||||
} else if (m_divisor > 1) {
|
} else if (m_divisor > 1) {
|
||||||
val /= (float)m_divisor;
|
val /= (float)m_divisor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
unsigned char* pval = (unsigned char*)&value;
|
|
||||||
val = *((float*)pval);
|
|
||||||
if (m_precision != 0)
|
if (m_precision != 0)
|
||||||
output << fixed << setprecision(m_precision+6);
|
output << fixed << setprecision(m_precision+6);
|
||||||
else if (val == 0)
|
else if (val == 0)
|
||||||
@@ -1201,6 +1203,10 @@ result_t NumberDataField::writeSymbols(istringstream& input,
|
|||||||
if (strEnd == NULL || strEnd == str || *strEnd != 0) {
|
if (strEnd == NULL || strEnd == str || *strEnd != 0) {
|
||||||
return RESULT_ERR_INVALID_NUM; // invalid value
|
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
|
#ifdef HAVE_DIRECT_FLOAT_FORMAT
|
||||||
float val = (float)dvalue;
|
float val = (float)dvalue;
|
||||||
unsigned char* pval = (unsigned char*)&val;
|
unsigned char* pval = (unsigned char*)&val;
|
||||||
|
|||||||
@@ -286,6 +286,15 @@ int main()
|
|||||||
{"x,,exp", "-0.001", "10feffff046f1283ba", "00", ""},
|
{"x,,exp", "-0.001", "10feffff046f1283ba", "00", ""},
|
||||||
{"x,,exp", "-", "10feffff040000807f", "00", ""},
|
{"x,,exp", "-", "10feffff040000807f", "00", ""},
|
||||||
{"x,,exp","-32.767", "10feffff04681103c2", "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", "18.004", "10fe0700090112", "00", ""},
|
||||||
{"x,,d2b", "0.000", "10feffff020000", "00", ""},
|
{"x,,d2b", "0.000", "10feffff020000", "00", ""},
|
||||||
{"x,,d2b", "-0.004", "10feffff02ffff", "00", ""},
|
{"x,,d2b", "-0.004", "10feffff02ffff", "00", ""},
|
||||||
|
|||||||
Reference in New Issue
Block a user