(('ffloor', 'a(is_integral)'), a),
(('fceil', 'a(is_integral)'), a),
(('ftrunc', 'a(is_integral)'), a),
- (('ffract', 'a(is_integral)'), 0.0),
+ # fract(x) = x - floor(x), so fract(NaN) = NaN
+ (('~ffract', 'a(is_integral)'), 0.0),
(('fabs', 'a(is_not_negative)'), a),
(('iabs', 'a(is_not_negative)'), a),
(('fsat', 'a(is_not_positive)'), 0.0),
(('fne', 'a(is_not_zero)', 0.0), True),
(('feq', 'a(is_not_zero)', 0.0), False),
- (('fge', 'a(is_not_negative)', 'b(is_not_positive)'), True),
- (('fge', 'b(is_not_positive)', 'a(is_gt_zero)'), False),
- (('fge', 'a(is_lt_zero)', 'b(is_not_negative)'), False),
- (('fge', 'b(is_not_negative)', 'a(is_not_positive)'), True),
+ # The results expecting true, must be marked imprecise. The results
+ # expecting false are fine because NaN compared >= or < anything is false.
- (('flt', 'a(is_not_negative)', 'b(is_not_positive)'), False),
- (('flt', 'b(is_not_positive)', 'a(is_gt_zero)'), True),
- (('flt', 'a(is_lt_zero)', 'b(is_not_negative)'), True),
- (('flt', 'b(is_not_negative)', 'a(is_not_positive)'), False),
+ (('~fge', 'a(is_not_negative)', 'b(is_not_positive)'), True),
+ (('fge', 'b(is_not_positive)', 'a(is_gt_zero)'), False),
+ (('fge', 'a(is_lt_zero)', 'b(is_not_negative)'), False),
+ (('~fge', 'b(is_not_negative)', 'a(is_not_positive)'), True),
+
+ (('flt', 'a(is_not_negative)', 'b(is_not_positive)'), False),
+ (('~flt', 'b(is_not_positive)', 'a(is_gt_zero)'), True),
+ (('~flt', 'a(is_lt_zero)', 'b(is_not_negative)'), True),
+ (('flt', 'b(is_not_negative)', 'a(is_not_positive)'), False),
(('ine', 'a(is_not_zero)', 0), True),
(('ieq', 'a(is_not_zero)', 0), False),