@@ -39,17 +39,6 @@ const NAN_MASK1: u128 = 0x0000aaaaaaaaaaaaaaaaaaaaaaaaaaaa;
39
39
/// Second pattern over the mantissa
40
40
const NAN_MASK2 : u128 = 0x00005555555555555555555555555555 ;
41
41
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
-
53
42
#[ test]
54
43
fn test_num_f128 ( ) {
55
44
// FIXME(f16_f128): replace with a `test_num` call once the required `fmodl`/`fmodf128`
@@ -260,98 +249,98 @@ fn test_classify() {
260
249
#[ cfg( not( miri) ) ]
261
250
#[ cfg( target_has_reliable_f128_math) ]
262
251
fn 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 ) ;
273
262
}
274
263
275
264
#[ test]
276
265
#[ cfg( not( miri) ) ]
277
266
#[ cfg( target_has_reliable_f128_math) ]
278
267
fn 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 ) ;
289
278
}
290
279
291
280
#[ test]
292
281
#[ cfg( not( miri) ) ]
293
282
#[ cfg( target_has_reliable_f128_math) ]
294
283
fn 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 ) ;
306
295
}
307
296
308
297
#[ test]
309
298
#[ cfg( not( miri) ) ]
310
299
#[ cfg( target_has_reliable_f128_math) ]
311
300
fn 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 ) ;
323
312
}
324
313
325
314
#[ test]
326
315
#[ cfg( not( miri) ) ]
327
316
#[ cfg( target_has_reliable_f128_math) ]
328
317
fn 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 ) ;
339
328
}
340
329
341
330
#[ test]
342
331
#[ cfg( not( miri) ) ]
343
332
#[ cfg( target_has_reliable_f128_math) ]
344
333
fn 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 ) ;
355
344
}
356
345
357
346
#[ test]
@@ -401,27 +390,27 @@ fn test_next_up() {
401
390
let max_down = f128:: from_bits ( MAX_DOWN_BITS ) ;
402
391
let largest_subnormal = f128:: from_bits ( LARGEST_SUBNORMAL_BITS ) ;
403
392
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 ) ;
417
406
418
407
// Check that NaNs roundtrip.
419
408
let nan0 = f128:: NAN ;
420
409
let nan1 = f128:: from_bits ( f128:: NAN . to_bits ( ) ^ 0x002a_aaaa ) ;
421
410
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) ;
425
414
}
426
415
427
416
#[ test]
@@ -431,28 +420,28 @@ fn test_next_down() {
431
420
let max_down = f128:: from_bits ( MAX_DOWN_BITS ) ;
432
421
let largest_subnormal = f128:: from_bits ( LARGEST_SUBNORMAL_BITS ) ;
433
422
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 ) ;
448
437
449
438
// Check that NaNs roundtrip.
450
439
let nan0 = f128:: NAN ;
451
440
let nan1 = f128:: from_bits ( f128:: NAN . to_bits ( ) ^ 0x002a_aaaa ) ;
452
441
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) ;
456
445
}
457
446
458
447
#[ test]
@@ -462,10 +451,10 @@ fn test_mul_add() {
462
451
let nan: f128 = f128:: NAN ;
463
452
let inf: f128 = f128:: INFINITY ;
464
453
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 ) ;
469
458
assert ! ( nan. mul_add( 7.8 , 9.0 ) . is_nan( ) ) ;
470
459
assert_eq ! ( inf. mul_add( 7.8 , 9.0 ) , inf) ;
471
460
assert_eq ! ( neg_inf. mul_add( 7.8 , 9.0 ) , neg_inf) ;
@@ -561,10 +550,10 @@ fn test_float_bits_conv() {
561
550
assert_eq ! ( ( 12.5f128 ) . to_bits( ) , 0x40029000000000000000000000000000 ) ;
562
551
assert_eq ! ( ( 1337 f128) . to_bits( ) , 0x40094e40000000000000000000000000 ) ;
563
552
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 ) ;
568
557
569
558
// Check that NaNs roundtrip their bits regardless of signaling-ness
570
559
// 0xA is 0b1010; 0x5 is 0b0101 -- so these two together clobbers all the mantissa bits
0 commit comments