Exponentiation is an operation done using floating point numbers. And there's no point in checking if the number is an integer within range of the user's IV or UV types, and converting it to those from the NV.
I don't think it's quite that simple.
Consider the example of
2** 50 provided by the OP - where the result was given as 1.12589990684262e+15.
That particular result is absolute rubbish. The correct figure is 1125899906842624.0 (which is a different value, yet one that is exactly representable inside that perl's NV) :
C:\>perl -le "print 'wtf' if 2 ** 50 == 1.12589990684262e+15;"
C:\>perl -le "print 'ok' if 2 ** 50 == 1125899906842624.0;"
ok
Why are we so ready to settle for a half-arsed floating point approximation when an exact floating point (or integer) representation is available ?
Also consider that, on a perl whose ivsize is 8 && whose nvsize is 8, you will be told that 3 ** 40 (which equates to less than ~0) is 1.21576654590569e+19.
This is a completely different value to the exact 12157665459056928801, which would be presented if perl DWIMmed by performing integer exponentiation.
And perl prides itself on DWIMming .... ??
Cheers,
Rob