LSL-Mono is specced (edit: I can't actually find where it's
specified in writing
to do that, but it's clearly what it does... maybe it's Mono that's been wrong all along, but too late to fix now) to return INT_MIN when trying to cast floats that are out of 32-bit integer bounds. LSL-SLua doesn't, repro:
default {
state_entry() {
integer i;
llOwnerSay("---");
for(i = 9; i < 17; ++i)
llOwnerSay((string)((integer)(PI*llPow(10, i))));
}
}
Under Mono, every cast returns INT_MIN, under LSL-SLua you get varying values.
llFloor, llCeil and llRound have the same specified OOB result, and work correctly for both VMs.