The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use warnings;
use strict;
use Math::Float128 qw(:all);
use Config;

print "1..4\n";

my $nv_root = sqrt 2.0;
my $ld_root = sqrt(Math::Float128->new(2.0));
my $ld_pow = Math::Float128->new(2.0) ** Math::Float128->new(0.5);

if(cmp2NV($ld_root, $nv_root) && $Config{nvtype} ne '__float128') {print "ok 1\n"}
elsif(!cmp2NV($ld_root, $nv_root) && $Config{nvtype} eq '__float128') {print "ok 1\n"}
else {
  warn "\n\$ld_root: $ld_root\n\$nv_root: $nv_root\n";
  print "not ok 1\n";
}

if(approx($ld_root, $nv_root)) {print "ok 2\n"}
else {
  warn "\n\$ld_root: $ld_root\n\$nv_root: $nv_root\n";
  print "not ok 2\n";
}

if($ld_pow == $ld_root) {print "ok 3\n"}
else {
  warn "\n\$ld_root: $ld_root\n\$ld_pow: $ld_pow\n";
  print "not ok 3\n";
}

$ld_pow **= Math::Float128->new(2.0);

if(approx($ld_pow, 2.0)) {print "ok 4\n"}
else {
  warn "\n\$ld_pow: $ld_pow\n";
  print "not ok 4\n";
}

sub approx {
    my $eps = $_[0] - NVtoF128($_[1]);
    return 0 if abs($eps) > NVtoF128(0.000000001);
    return 1;
}