Added floating point conversions...
[r1216]
void fc_get_min(unsigned int num_bits)
{
CLEAR_BUFFER();
void fc_get_min(unsigned int num_bits)
{
CLEAR_BUFFER();
+
+ /*
+ * Beware: FLT_MIN is the "Minimum normalised float",
+ * not the smallest number in arithmetic sense
+ */
+ switch (num_bits) {
int fc_comp(const void *a, const void *b)
{
int fc_comp(const void *a, const void *b)
{
- if (CAST_IN(a) == CAST_IN(b)) return 0;
- else return (CAST_IN(a) > CAST_IN(b))?(1):(-1);
+ char buf1[40], buf2[40];
+
+ if (CAST_IN(a) == CAST_IN(b)) {
+ return 0;
+ }
+ else if (CAST_IN(a) > CAST_IN(b)) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
}
char *fc_print_dec(const void *a, char *buf, int buflen)
}
char *fc_print_dec(const void *a, char *buf, int buflen)
break;
case irms_float_number:
break;
case irms_float_number:
+ /*
+ * TODO: check NaNs
+ */
if (fc_comp(tv->value, get_mode_max(tv->mode)->value) == 1) return 1;
if (fc_comp(tv->value, get_mode_min(tv->mode)->value) == -1) return 1;
break;
if (fc_comp(tv->value, get_mode_max(tv->mode)->value) == 1) return 1;
if (fc_comp(tv->value, get_mode_min(tv->mode)->value) == -1) return 1;
break;
break;
case irms_float_number:
break;
case irms_float_number:
+ switch (get_mode_sort(m)) {
+ case irms_float_number:
+ tv.mode = m;
+ tv.length = src->length;
+ tv.value = src->value;
+ if (overflows(&tv)) {
+ return tarval_bad;
+ }
+
+ return INSERT_TARVAL(&tv);
+
+ default:
+ break;
+ }
break;
case irms_int_number:
break;
case irms_int_number:
- switch (get_mode_sort(m))
- {
+ switch (get_mode_sort(m)) {
case irms_int_number:
case irms_character:
case irms_int_number:
case irms_character:
return INSERT_TARVAL(&tv);
case irms_internal_boolean:
return INSERT_TARVAL(&tv);
case irms_internal_boolean: