Replicated with perl 5.19.7 built with long double.
In t/Fibonacci.t I inserted before the i+3 case:
if ($i == 100) { print "i = $i got_i = $i\n"; printf "%.20f\n%20f\n", $got_value, $seq->ith($i+3); }
if ($i == 100) { print unpack("h*", pack("F", $got_value)), "\n";
print unpack("h*", pack("F", $seq->ith($i+3))), "\n"; }
and got:
i = 100 got_i = 100
1500520536206896083200.00000000000000000000
1500520536206896083328.000000
26a6dc92bafcfa2a5404000000000000
36a6dc92bafcfa2a5404000000000000
showing the FP representations differ.
If I change the loop for use $j, then do:
my $i = Math::BigInt->new($j);
at the top, then both calls return 1500520536206896083277 which is the correct value for F_103.
At first blush, perhaps the comparison should be inexact (e.g. Test::Number::Delta or equivalent) or Math::BigInts should be used.