@@ -39,17 +39,6 @@ const NAN_MASK1: u128 = 0x0000aaaaaaaaaaaaaaaaaaaaaaaaaaaa;
3939/// Second pattern over the mantissa
4040const NAN_MASK2 : u128 = 0x00005555555555555555555555555555 ;
4141
42- /// Compare by representation
43- #[ allow( unused_macros) ]
44- macro_rules! assert_f128_biteq {
45- ( $a: expr, $b: expr) => {
46- let ( l, r) : ( & f128, & f128) = ( & $a, & $b) ;
47- let lb = l. to_bits( ) ;
48- let rb = r. to_bits( ) ;
49- assert_eq!( lb, rb, "float {l:?} is not bitequal to {r:?}.\n a: {lb:#034x}\n b: {rb:#034x}" ) ;
50- } ;
51- }
52-
5342#[ test]
5443fn test_num_f128 ( ) {
5544 // FIXME(f16_f128): replace with a `test_num` call once the required `fmodl`/`fmodf128`
@@ -260,98 +249,98 @@ fn test_classify() {
260249#[ cfg( not( miri) ) ]
261250#[ cfg( target_has_reliable_f128_math) ]
262251fn test_floor ( ) {
263- assert_approx_eq ! ( 1.0f128 . floor( ) , 1.0f128 , TOL_PRECISE ) ;
264- assert_approx_eq ! ( 1.3f128 . floor( ) , 1.0f128 , TOL_PRECISE ) ;
265- assert_approx_eq ! ( 1.5f128 . floor( ) , 1.0f128 , TOL_PRECISE ) ;
266- assert_approx_eq ! ( 1.7f128 . floor( ) , 1.0f128 , TOL_PRECISE ) ;
267- assert_approx_eq ! ( 0.0f128 . floor( ) , 0.0f128 , TOL_PRECISE ) ;
268- assert_approx_eq ! ( ( -0.0f128 ) . floor( ) , -0.0f128 , TOL_PRECISE ) ;
269- assert_approx_eq ! ( ( -1.0f128 ) . floor( ) , -1.0f128 , TOL_PRECISE ) ;
270- assert_approx_eq ! ( ( -1.3f128 ) . floor( ) , -2.0f128 , TOL_PRECISE ) ;
271- assert_approx_eq ! ( ( -1.5f128 ) . floor( ) , -2.0f128 , TOL_PRECISE ) ;
272- assert_approx_eq ! ( ( -1.7f128 ) . floor( ) , -2.0f128 , TOL_PRECISE ) ;
252+ assert_eq ! ( 1.0f128 . floor( ) , 1.0f128 ) ;
253+ assert_eq ! ( 1.3f128 . floor( ) , 1.0f128 ) ;
254+ assert_eq ! ( 1.5f128 . floor( ) , 1.0f128 ) ;
255+ assert_eq ! ( 1.7f128 . floor( ) , 1.0f128 ) ;
256+ assert_eq ! ( 0.0f128 . floor( ) , 0.0f128 ) ;
257+ assert_eq ! ( ( -0.0f128 ) . floor( ) , -0.0f128 ) ;
258+ assert_eq ! ( ( -1.0f128 ) . floor( ) , -1.0f128 ) ;
259+ assert_eq ! ( ( -1.3f128 ) . floor( ) , -2.0f128 ) ;
260+ assert_eq ! ( ( -1.5f128 ) . floor( ) , -2.0f128 ) ;
261+ assert_eq ! ( ( -1.7f128 ) . floor( ) , -2.0f128 ) ;
273262}
274263
275264#[ test]
276265#[ cfg( not( miri) ) ]
277266#[ cfg( target_has_reliable_f128_math) ]
278267fn test_ceil ( ) {
279- assert_approx_eq ! ( 1.0f128 . ceil( ) , 1.0f128 , TOL_PRECISE ) ;
280- assert_approx_eq ! ( 1.3f128 . ceil( ) , 2.0f128 , TOL_PRECISE ) ;
281- assert_approx_eq ! ( 1.5f128 . ceil( ) , 2.0f128 , TOL_PRECISE ) ;
282- assert_approx_eq ! ( 1.7f128 . ceil( ) , 2.0f128 , TOL_PRECISE ) ;
283- assert_approx_eq ! ( 0.0f128 . ceil( ) , 0.0f128 , TOL_PRECISE ) ;
284- assert_approx_eq ! ( ( -0.0f128 ) . ceil( ) , -0.0f128 , TOL_PRECISE ) ;
285- assert_approx_eq ! ( ( -1.0f128 ) . ceil( ) , -1.0f128 , TOL_PRECISE ) ;
286- assert_approx_eq ! ( ( -1.3f128 ) . ceil( ) , -1.0f128 , TOL_PRECISE ) ;
287- assert_approx_eq ! ( ( -1.5f128 ) . ceil( ) , -1.0f128 , TOL_PRECISE ) ;
288- assert_approx_eq ! ( ( -1.7f128 ) . ceil( ) , -1.0f128 , TOL_PRECISE ) ;
268+ assert_eq ! ( 1.0f128 . ceil( ) , 1.0f128 ) ;
269+ assert_eq ! ( 1.3f128 . ceil( ) , 2.0f128 ) ;
270+ assert_eq ! ( 1.5f128 . ceil( ) , 2.0f128 ) ;
271+ assert_eq ! ( 1.7f128 . ceil( ) , 2.0f128 ) ;
272+ assert_eq ! ( 0.0f128 . ceil( ) , 0.0f128 ) ;
273+ assert_eq ! ( ( -0.0f128 ) . ceil( ) , -0.0f128 ) ;
274+ assert_eq ! ( ( -1.0f128 ) . ceil( ) , -1.0f128 ) ;
275+ assert_eq ! ( ( -1.3f128 ) . ceil( ) , -1.0f128 ) ;
276+ assert_eq ! ( ( -1.5f128 ) . ceil( ) , -1.0f128 ) ;
277+ assert_eq ! ( ( -1.7f128 ) . ceil( ) , -1.0f128 ) ;
289278}
290279
291280#[ test]
292281#[ cfg( not( miri) ) ]
293282#[ cfg( target_has_reliable_f128_math) ]
294283fn test_round ( ) {
295- assert_approx_eq ! ( 2.5f128 . round( ) , 3.0f128 , TOL_PRECISE ) ;
296- assert_approx_eq ! ( 1.0f128 . round( ) , 1.0f128 , TOL_PRECISE ) ;
297- assert_approx_eq ! ( 1.3f128 . round( ) , 1.0f128 , TOL_PRECISE ) ;
298- assert_approx_eq ! ( 1.5f128 . round( ) , 2.0f128 , TOL_PRECISE ) ;
299- assert_approx_eq ! ( 1.7f128 . round( ) , 2.0f128 , TOL_PRECISE ) ;
300- assert_approx_eq ! ( 0.0f128 . round( ) , 0.0f128 , TOL_PRECISE ) ;
301- assert_approx_eq ! ( ( -0.0f128 ) . round( ) , -0.0f128 , TOL_PRECISE ) ;
302- assert_approx_eq ! ( ( -1.0f128 ) . round( ) , -1.0f128 , TOL_PRECISE ) ;
303- assert_approx_eq ! ( ( -1.3f128 ) . round( ) , -1.0f128 , TOL_PRECISE ) ;
304- assert_approx_eq ! ( ( -1.5f128 ) . round( ) , -2.0f128 , TOL_PRECISE ) ;
305- assert_approx_eq ! ( ( -1.7f128 ) . round( ) , -2.0f128 , TOL_PRECISE ) ;
284+ assert_eq ! ( 2.5f128 . round( ) , 3.0f128 ) ;
285+ assert_eq ! ( 1.0f128 . round( ) , 1.0f128 ) ;
286+ assert_eq ! ( 1.3f128 . round( ) , 1.0f128 ) ;
287+ assert_eq ! ( 1.5f128 . round( ) , 2.0f128 ) ;
288+ assert_eq ! ( 1.7f128 . round( ) , 2.0f128 ) ;
289+ assert_eq ! ( 0.0f128 . round( ) , 0.0f128 ) ;
290+ assert_eq ! ( ( -0.0f128 ) . round( ) , -0.0f128 ) ;
291+ assert_eq ! ( ( -1.0f128 ) . round( ) , -1.0f128 ) ;
292+ assert_eq ! ( ( -1.3f128 ) . round( ) , -1.0f128 ) ;
293+ assert_eq ! ( ( -1.5f128 ) . round( ) , -2.0f128 ) ;
294+ assert_eq ! ( ( -1.7f128 ) . round( ) , -2.0f128 ) ;
306295}
307296
308297#[ test]
309298#[ cfg( not( miri) ) ]
310299#[ cfg( target_has_reliable_f128_math) ]
311300fn test_round_ties_even ( ) {
312- assert_approx_eq ! ( 2.5f128 . round_ties_even( ) , 2.0f128 , TOL_PRECISE ) ;
313- assert_approx_eq ! ( 1.0f128 . round_ties_even( ) , 1.0f128 , TOL_PRECISE ) ;
314- assert_approx_eq ! ( 1.3f128 . round_ties_even( ) , 1.0f128 , TOL_PRECISE ) ;
315- assert_approx_eq ! ( 1.5f128 . round_ties_even( ) , 2.0f128 , TOL_PRECISE ) ;
316- assert_approx_eq ! ( 1.7f128 . round_ties_even( ) , 2.0f128 , TOL_PRECISE ) ;
317- assert_approx_eq ! ( 0.0f128 . round_ties_even( ) , 0.0f128 , TOL_PRECISE ) ;
318- assert_approx_eq ! ( ( -0.0f128 ) . round_ties_even( ) , -0.0f128 , TOL_PRECISE ) ;
319- assert_approx_eq ! ( ( -1.0f128 ) . round_ties_even( ) , -1.0f128 , TOL_PRECISE ) ;
320- assert_approx_eq ! ( ( -1.3f128 ) . round_ties_even( ) , -1.0f128 , TOL_PRECISE ) ;
321- assert_approx_eq ! ( ( -1.5f128 ) . round_ties_even( ) , -2.0f128 , TOL_PRECISE ) ;
322- assert_approx_eq ! ( ( -1.7f128 ) . round_ties_even( ) , -2.0f128 , TOL_PRECISE ) ;
301+ assert_eq ! ( 2.5f128 . round_ties_even( ) , 2.0f128 ) ;
302+ assert_eq ! ( 1.0f128 . round_ties_even( ) , 1.0f128 ) ;
303+ assert_eq ! ( 1.3f128 . round_ties_even( ) , 1.0f128 ) ;
304+ assert_eq ! ( 1.5f128 . round_ties_even( ) , 2.0f128 ) ;
305+ assert_eq ! ( 1.7f128 . round_ties_even( ) , 2.0f128 ) ;
306+ assert_eq ! ( 0.0f128 . round_ties_even( ) , 0.0f128 ) ;
307+ assert_eq ! ( ( -0.0f128 ) . round_ties_even( ) , -0.0f128 ) ;
308+ assert_eq ! ( ( -1.0f128 ) . round_ties_even( ) , -1.0f128 ) ;
309+ assert_eq ! ( ( -1.3f128 ) . round_ties_even( ) , -1.0f128 ) ;
310+ assert_eq ! ( ( -1.5f128 ) . round_ties_even( ) , -2.0f128 ) ;
311+ assert_eq ! ( ( -1.7f128 ) . round_ties_even( ) , -2.0f128 ) ;
323312}
324313
325314#[ test]
326315#[ cfg( not( miri) ) ]
327316#[ cfg( target_has_reliable_f128_math) ]
328317fn test_trunc ( ) {
329- assert_approx_eq ! ( 1.0f128 . trunc( ) , 1.0f128 , TOL_PRECISE ) ;
330- assert_approx_eq ! ( 1.3f128 . trunc( ) , 1.0f128 , TOL_PRECISE ) ;
331- assert_approx_eq ! ( 1.5f128 . trunc( ) , 1.0f128 , TOL_PRECISE ) ;
332- assert_approx_eq ! ( 1.7f128 . trunc( ) , 1.0f128 , TOL_PRECISE ) ;
333- assert_approx_eq ! ( 0.0f128 . trunc( ) , 0.0f128 , TOL_PRECISE ) ;
334- assert_approx_eq ! ( ( -0.0f128 ) . trunc( ) , -0.0f128 , TOL_PRECISE ) ;
335- assert_approx_eq ! ( ( -1.0f128 ) . trunc( ) , -1.0f128 , TOL_PRECISE ) ;
336- assert_approx_eq ! ( ( -1.3f128 ) . trunc( ) , -1.0f128 , TOL_PRECISE ) ;
337- assert_approx_eq ! ( ( -1.5f128 ) . trunc( ) , -1.0f128 , TOL_PRECISE ) ;
338- assert_approx_eq ! ( ( -1.7f128 ) . trunc( ) , -1.0f128 , TOL_PRECISE ) ;
318+ assert_eq ! ( 1.0f128 . trunc( ) , 1.0f128 ) ;
319+ assert_eq ! ( 1.3f128 . trunc( ) , 1.0f128 ) ;
320+ assert_eq ! ( 1.5f128 . trunc( ) , 1.0f128 ) ;
321+ assert_eq ! ( 1.7f128 . trunc( ) , 1.0f128 ) ;
322+ assert_eq ! ( 0.0f128 . trunc( ) , 0.0f128 ) ;
323+ assert_eq ! ( ( -0.0f128 ) . trunc( ) , -0.0f128 ) ;
324+ assert_eq ! ( ( -1.0f128 ) . trunc( ) , -1.0f128 ) ;
325+ assert_eq ! ( ( -1.3f128 ) . trunc( ) , -1.0f128 ) ;
326+ assert_eq ! ( ( -1.5f128 ) . trunc( ) , -1.0f128 ) ;
327+ assert_eq ! ( ( -1.7f128 ) . trunc( ) , -1.0f128 ) ;
339328}
340329
341330#[ test]
342331#[ cfg( not( miri) ) ]
343332#[ cfg( target_has_reliable_f128_math) ]
344333fn test_fract ( ) {
345- assert_approx_eq ! ( 1.0f128 . fract( ) , 0.0f128 , TOL_PRECISE ) ;
346- assert_approx_eq ! ( 1.3f128 . fract( ) , 0.3f128 , TOL_PRECISE ) ;
347- assert_approx_eq ! ( 1.5f128 . fract( ) , 0.5f128 , TOL_PRECISE ) ;
348- assert_approx_eq ! ( 1.7f128 . fract( ) , 0.7f128 , TOL_PRECISE ) ;
349- assert_approx_eq ! ( 0.0f128 . fract( ) , 0.0f128 , TOL_PRECISE ) ;
350- assert_approx_eq ! ( ( -0.0f128 ) . fract( ) , -0.0f128 , TOL_PRECISE ) ;
351- assert_approx_eq ! ( ( -1.0f128 ) . fract( ) , -0.0f128 , TOL_PRECISE ) ;
352- assert_approx_eq ! ( ( -1.3f128 ) . fract( ) , -0.3f128 , TOL_PRECISE ) ;
353- assert_approx_eq ! ( ( -1.5f128 ) . fract( ) , -0.5f128 , TOL_PRECISE ) ;
354- assert_approx_eq ! ( ( -1.7f128 ) . fract( ) , -0.7f128 , TOL_PRECISE ) ;
334+ assert_eq ! ( 1.0f128 . fract( ) , 0.0f128 ) ;
335+ assert_eq ! ( 1.3f128 . fract( ) , 0.300000000000000044408920985006261617f128 ) ;
336+ assert_eq ! ( 1.5f128 . fract( ) , 0.5f128 ) ;
337+ assert_eq ! ( 1.7f128 . fract( ) , 0.7f128 ) ;
338+ assert_eq ! ( 0.0f128 . fract( ) , 0.0f128 ) ;
339+ assert_eq ! ( ( -0.0f128 ) . fract( ) , -0.0f128 ) ;
340+ assert_eq ! ( ( -1.0f128 ) . fract( ) , -0.0f128 ) ;
341+ assert_eq ! ( ( -1.3f128 ) . fract( ) , -0.300000000000000044408920985006261617f128 ) ;
342+ assert_eq ! ( ( -1.5f128 ) . fract( ) , -0.5f128 ) ;
343+ assert_eq ! ( ( -1.7f128 ) . fract( ) , -0.699999999999999955591079014993738383f128 ) ;
355344}
356345
357346#[ test]
@@ -401,27 +390,27 @@ fn test_next_up() {
401390 let max_down = f128:: from_bits ( MAX_DOWN_BITS ) ;
402391 let largest_subnormal = f128:: from_bits ( LARGEST_SUBNORMAL_BITS ) ;
403392 let smallest_normal = f128:: from_bits ( SMALLEST_NORMAL_BITS ) ;
404- assert_f128_biteq ! ( f128:: NEG_INFINITY . next_up( ) , f128:: MIN ) ;
405- assert_f128_biteq ! ( f128:: MIN . next_up( ) , -max_down) ;
406- assert_f128_biteq ! ( ( -1.0 - f128:: EPSILON ) . next_up( ) , -1.0 ) ;
407- assert_f128_biteq ! ( ( -smallest_normal) . next_up( ) , -largest_subnormal) ;
408- assert_f128_biteq ! ( ( -tiny_up) . next_up( ) , -tiny) ;
409- assert_f128_biteq ! ( ( -tiny) . next_up( ) , -0.0f128 ) ;
410- assert_f128_biteq ! ( ( -0.0f128 ) . next_up( ) , tiny) ;
411- assert_f128_biteq ! ( 0.0f128 . next_up( ) , tiny) ;
412- assert_f128_biteq ! ( tiny. next_up( ) , tiny_up) ;
413- assert_f128_biteq ! ( largest_subnormal. next_up( ) , smallest_normal) ;
414- assert_f128_biteq ! ( 1.0f128 . next_up( ) , 1.0 + f128:: EPSILON ) ;
415- assert_f128_biteq ! ( f128:: MAX . next_up( ) , f128:: INFINITY ) ;
416- assert_f128_biteq ! ( f128:: INFINITY . next_up( ) , f128:: INFINITY ) ;
393+ assert_biteq ! ( f128:: NEG_INFINITY . next_up( ) , f128:: MIN ) ;
394+ assert_biteq ! ( f128:: MIN . next_up( ) , -max_down) ;
395+ assert_biteq ! ( ( -1.0 - f128:: EPSILON ) . next_up( ) , -1.0f128 ) ;
396+ assert_biteq ! ( ( -smallest_normal) . next_up( ) , -largest_subnormal) ;
397+ assert_biteq ! ( ( -tiny_up) . next_up( ) , -tiny) ;
398+ assert_biteq ! ( ( -tiny) . next_up( ) , -0.0f128 ) ;
399+ assert_biteq ! ( ( -0.0f128 ) . next_up( ) , tiny) ;
400+ assert_biteq ! ( 0.0f128 . next_up( ) , tiny) ;
401+ assert_biteq ! ( tiny. next_up( ) , tiny_up) ;
402+ assert_biteq ! ( largest_subnormal. next_up( ) , smallest_normal) ;
403+ assert_biteq ! ( 1.0f128 . next_up( ) , 1.0 + f128:: EPSILON ) ;
404+ assert_biteq ! ( f128:: MAX . next_up( ) , f128:: INFINITY ) ;
405+ assert_biteq ! ( f128:: INFINITY . next_up( ) , f128:: INFINITY ) ;
417406
418407 // Check that NaNs roundtrip.
419408 let nan0 = f128:: NAN ;
420409 let nan1 = f128:: from_bits ( f128:: NAN . to_bits ( ) ^ 0x002a_aaaa ) ;
421410 let nan2 = f128:: from_bits ( f128:: NAN . to_bits ( ) ^ 0x0055_5555 ) ;
422- assert_f128_biteq ! ( nan0. next_up( ) , nan0) ;
423- assert_f128_biteq ! ( nan1. next_up( ) , nan1) ;
424- assert_f128_biteq ! ( nan2. next_up( ) , nan2) ;
411+ assert_biteq ! ( nan0. next_up( ) , nan0) ;
412+ assert_biteq ! ( nan1. next_up( ) , nan1) ;
413+ assert_biteq ! ( nan2. next_up( ) , nan2) ;
425414}
426415
427416#[ test]
@@ -431,28 +420,28 @@ fn test_next_down() {
431420 let max_down = f128:: from_bits ( MAX_DOWN_BITS ) ;
432421 let largest_subnormal = f128:: from_bits ( LARGEST_SUBNORMAL_BITS ) ;
433422 let smallest_normal = f128:: from_bits ( SMALLEST_NORMAL_BITS ) ;
434- assert_f128_biteq ! ( f128:: NEG_INFINITY . next_down( ) , f128:: NEG_INFINITY ) ;
435- assert_f128_biteq ! ( f128:: MIN . next_down( ) , f128:: NEG_INFINITY ) ;
436- assert_f128_biteq ! ( ( -max_down) . next_down( ) , f128:: MIN ) ;
437- assert_f128_biteq ! ( ( -1.0f128 ) . next_down( ) , -1.0 - f128:: EPSILON ) ;
438- assert_f128_biteq ! ( ( -largest_subnormal) . next_down( ) , -smallest_normal) ;
439- assert_f128_biteq ! ( ( -tiny) . next_down( ) , -tiny_up) ;
440- assert_f128_biteq ! ( ( -0.0f128 ) . next_down( ) , -tiny) ;
441- assert_f128_biteq ! ( ( 0.0f128 ) . next_down( ) , -tiny) ;
442- assert_f128_biteq ! ( tiny. next_down( ) , 0.0f128 ) ;
443- assert_f128_biteq ! ( tiny_up. next_down( ) , tiny) ;
444- assert_f128_biteq ! ( smallest_normal. next_down( ) , largest_subnormal) ;
445- assert_f128_biteq ! ( ( 1.0 + f128:: EPSILON ) . next_down( ) , 1.0f128 ) ;
446- assert_f128_biteq ! ( f128:: MAX . next_down( ) , max_down) ;
447- assert_f128_biteq ! ( f128:: INFINITY . next_down( ) , f128:: MAX ) ;
423+ assert_biteq ! ( f128:: NEG_INFINITY . next_down( ) , f128:: NEG_INFINITY ) ;
424+ assert_biteq ! ( f128:: MIN . next_down( ) , f128:: NEG_INFINITY ) ;
425+ assert_biteq ! ( ( -max_down) . next_down( ) , f128:: MIN ) ;
426+ assert_biteq ! ( ( -1.0f128 ) . next_down( ) , -1.0 - f128:: EPSILON ) ;
427+ assert_biteq ! ( ( -largest_subnormal) . next_down( ) , -smallest_normal) ;
428+ assert_biteq ! ( ( -tiny) . next_down( ) , -tiny_up) ;
429+ assert_biteq ! ( ( -0.0f128 ) . next_down( ) , -tiny) ;
430+ assert_biteq ! ( ( 0.0f128 ) . next_down( ) , -tiny) ;
431+ assert_biteq ! ( tiny. next_down( ) , 0.0f128 ) ;
432+ assert_biteq ! ( tiny_up. next_down( ) , tiny) ;
433+ assert_biteq ! ( smallest_normal. next_down( ) , largest_subnormal) ;
434+ assert_biteq ! ( ( 1.0 + f128:: EPSILON ) . next_down( ) , 1.0f128 ) ;
435+ assert_biteq ! ( f128:: MAX . next_down( ) , max_down) ;
436+ assert_biteq ! ( f128:: INFINITY . next_down( ) , f128:: MAX ) ;
448437
449438 // Check that NaNs roundtrip.
450439 let nan0 = f128:: NAN ;
451440 let nan1 = f128:: from_bits ( f128:: NAN . to_bits ( ) ^ 0x002a_aaaa ) ;
452441 let nan2 = f128:: from_bits ( f128:: NAN . to_bits ( ) ^ 0x0055_5555 ) ;
453- assert_f128_biteq ! ( nan0. next_down( ) , nan0) ;
454- assert_f128_biteq ! ( nan1. next_down( ) , nan1) ;
455- assert_f128_biteq ! ( nan2. next_down( ) , nan2) ;
442+ assert_biteq ! ( nan0. next_down( ) , nan0) ;
443+ assert_biteq ! ( nan1. next_down( ) , nan1) ;
444+ assert_biteq ! ( nan2. next_down( ) , nan2) ;
456445}
457446
458447#[ test]
@@ -462,10 +451,10 @@ fn test_mul_add() {
462451 let nan: f128 = f128:: NAN ;
463452 let inf: f128 = f128:: INFINITY ;
464453 let neg_inf: f128 = f128:: NEG_INFINITY ;
465- assert_approx_eq ! ( 12.3f128 . mul_add( 4.5 , 6.7 ) , 62.05 , TOL_PRECISE ) ;
466- assert_approx_eq ! ( ( -12.3f128 ) . mul_add( -4.5 , -6.7 ) , 48.65 , TOL_PRECISE ) ;
467- assert_approx_eq ! ( 0.0f128 . mul_add( 8.9 , 1.2 ) , 1.2 , TOL_PRECISE ) ;
468- assert_approx_eq ! ( 3.4f128 . mul_add( -0.0 , 5.6 ) , 5.6 , TOL_PRECISE ) ;
454+ assert_eq ! ( 12.3f128 . mul_add( 4.5 , 6.7 ) , 62.0500000000000033750779948604758829 ) ;
455+ assert_eq ! ( ( -12.3f128 ) . mul_add( -4.5 , -6.7 ) , 48.65000000000000301980662698042579 ) ;
456+ assert_eq ! ( 0.0f128 . mul_add( 8.9 , 1.2 ) , 1.2 ) ;
457+ assert_eq ! ( 3.4f128 . mul_add( -0.0 , 5.6 ) , 5.6 ) ;
469458 assert ! ( nan. mul_add( 7.8 , 9.0 ) . is_nan( ) ) ;
470459 assert_eq ! ( inf. mul_add( 7.8 , 9.0 ) , inf) ;
471460 assert_eq ! ( neg_inf. mul_add( 7.8 , 9.0 ) , neg_inf) ;
@@ -561,10 +550,10 @@ fn test_float_bits_conv() {
561550 assert_eq ! ( ( 12.5f128 ) . to_bits( ) , 0x40029000000000000000000000000000 ) ;
562551 assert_eq ! ( ( 1337 f128) . to_bits( ) , 0x40094e40000000000000000000000000 ) ;
563552 assert_eq ! ( ( -14.25f128 ) . to_bits( ) , 0xc002c800000000000000000000000000 ) ;
564- assert_approx_eq ! ( f128:: from_bits( 0x3fff0000000000000000000000000000 ) , 1.0 , TOL_PRECISE ) ;
565- assert_approx_eq ! ( f128:: from_bits( 0x40029000000000000000000000000000 ) , 12.5 , TOL_PRECISE ) ;
566- assert_approx_eq ! ( f128:: from_bits( 0x40094e40000000000000000000000000 ) , 1337.0 , TOL_PRECISE ) ;
567- assert_approx_eq ! ( f128:: from_bits( 0xc002c800000000000000000000000000 ) , -14.25 , TOL_PRECISE ) ;
553+ assert_eq ! ( f128:: from_bits( 0x3fff0000000000000000000000000000 ) , 1.0 ) ;
554+ assert_eq ! ( f128:: from_bits( 0x40029000000000000000000000000000 ) , 12.5 ) ;
555+ assert_eq ! ( f128:: from_bits( 0x40094e40000000000000000000000000 ) , 1337.0 ) ;
556+ assert_eq ! ( f128:: from_bits( 0xc002c800000000000000000000000000 ) , -14.25 ) ;
568557
569558 // Check that NaNs roundtrip their bits regardless of signaling-ness
570559 // 0xA is 0b1010; 0x5 is 0b0101 -- so these two together clobbers all the mantissa bits
0 commit comments