Packages
mmath
0.2.0-alpha6
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.2.0-alpha9
0.2.0-alpha8
0.2.0-alpha7
0.2.0-alpha6
0.2.0-alpha5
0.2.0-alpha4
0.2.0-alpha3
0.2.0-alpha2
0.2.0-alpha10
0.2.0-alpha1
0.2.0-alpha
0.1.17-alpha
0.1.16
0.1.15
0.1.14
0.1.13
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
math library for metric sequences and binary arrays.
Current section
Files
Jump to
Current section
Files
c_src/float_conv.c~
#include "mmath.h"
ErlNifSInt64
float_serialize(ffloat f) {
decimal v = dec_from_double(v.value);
return htonll((! v.exponent) ?
((v.coefficient & VALUE_MASK) | 0x0100000000000000LL) :
(v.coefficient & 0x0000FFFFFFFFFFFFLL) |
((int64_t)(v.exponent & 0xFF) << COEFFICIENT_BITS) |
DECIMAL_TAG
);
};
ffloat
dec_deserialize(ErlNifSInt64 ev) {
ffloat f;
decimal d;
int64_t v = ntohll(ev);
char type = (uint8_t)((v & TYPE_MASK) >> 56);
f.confidence = CERTAIN;
if (type == INTEGER_TYPE) {
f.value = v & VALUE_MASK;
if (v & VALUE_SIGN_MASK) {
d.coefficient |= ((int64_t) -1) & ~ VALUE_MASK;
}
} else if (type == DECIMAL_TYPE) {
d.exponent = (int8_t)((v & EXPONENT_MASK) >> COEFFICIENT_BITS);
d.coefficient = v & COEFFICIENT_MASK;
if (v & COEFFICIENT_SIGN_MASK) {
d.coefficient |= ((int64_t) -1) & ~ COEFFICIENT_MASK;
}
f.value = dec_to_dobule(d);
}
return f;
}