function int32.abbreviate(funcDecimal:int32=1):string; begin case abs(self) of 0..999:result:=toStr(self); 1000..999999:result:=toStr(round(self/pow(10,3-(funcDecimal:=min(3,funcDecimal))))/pow(10,funcDecimal))+'K'; 1000000..999999999:result:=toStr(round(self/pow(10,6-(funcDecimal:=min(3,funcDecimal))))/pow(10,funcDecimal))+'M'; 1000000000..2147483647:result:=toStr(round(self/pow(10,9-(funcDecimal:=min(3,funcDecimal))))/pow(10,funcDecimal))+'B'; end; end; function uInt32.abbreviate(funcDecimal:int32=1):string; begin case abs(self) of 0..999:result:=toStr(self); 1000..999999:result:=toStr(round(self/pow(10,3-(funcDecimal:=min(3,funcDecimal))))/pow(10,funcDecimal))+'K'; 1000000..999999999:result:=toStr(round(self/pow(10,6-(funcDecimal:=min(3,funcDecimal))))/pow(10,funcDecimal))+'M'; 1000000000..2147483647:result:=toStr(round(self/pow(10,9-(funcDecimal:=min(3,funcDecimal))))/pow(10,funcDecimal))+'B'; end; end; function int32.abs():int32; begin exit(result:=(self+(self shr 31)) xor (self shr 31));end; function uInt32.abs():int32; begin exit(result:=(self+(self shr 31)) xor (self shr 31));end; function double.abs():double; begin result:=self; if result<0 then result:=-result; exit(result); end; function single.abs():double; begin result:=self; if result<0 then result:=-result; exit(result); end; function shortestDegrees(funcStart,funcEnd:int32):int32; begin if ((result:=funcEnd-funcStart)+(result shr 31)) xor (result shr 31)<180 then exit() else if funcStart