@@ -466,6 +466,14 @@ Float128(x::Irrational{T}) where {T} = Float128(BigFloat(x))
466
466
467
467
import Base. MPFR
468
468
469
+ @static if VERSION >= v " 1.12.0-DEV.1343"
470
+ const _big_setindex! = Base. setindex!
471
+ const _big_getindex = Base. getindex
472
+ else
473
+ const _big_setindex! = unsafe_store!
474
+ const _big_getindex = unsafe_load
475
+ end
476
+
469
477
function BigFloat (x:: Float128 ; precision= precision (BigFloat))
470
478
if ! isfinite (x) || iszero (x)
471
479
@static if VERSION < v " 1.1"
@@ -490,13 +498,13 @@ function BigFloat(x::Float128; precision=precision(BigFloat))
490
498
i = cld (precision, sizeof (MPFR. Limb)* 8 )
491
499
while u != 0
492
500
w = (u >> (128 - sizeof (MPFR. Limb)* 8 )) % MPFR. Limb
493
- unsafe_store ! (b. d, w, i)
501
+ _big_setindex ! (b. d, w, i)
494
502
i -= 1
495
503
u <<= sizeof (MPFR. Limb)* 8
496
504
end
497
505
# set remaining bits to zero
498
506
while i > 0
499
- unsafe_store ! (b. d, zero (MPFR. Limb), i)
507
+ _big_setindex ! (b. d, zero (MPFR. Limb), i)
500
508
i -= 1
501
509
end
502
510
@@ -547,7 +555,7 @@ function Float128(x::BigFloat)
547
555
j = 113
548
556
while i > 0
549
557
j -= sizeof (MPFR. Limb)* 8
550
- u |= (unsafe_load (y. d, i) % UInt128) << j
558
+ u |= (_big_getindex (y. d, i) % UInt128) << j
551
559
i -= 1
552
560
end
553
561
u &= significand_mask (Float128)
0 commit comments