This page shows the all the different results that you may get when performing arithmetic operations on the different data types in GML.
The tables all follow the same format, with the rows (left) showing the left hand side of an arithmetical operation, and the columns (right) showing the right hand side, e.g.:
<result> = <LHS or row> + <RHS or column>
IMPORTANT Prior to GameMaker 2022.9, these tables were inverted -- the columns showed LHS and rows showed RHS. This was counter-intuitive and was changed to be the opposite.
Add (+) | Real | Bool | String | Int32 | Int64 | Ptr | undefined | Array |
Real | Real | Real | String | Real | Real | Error | Error | Error |
Bool | Real | Real | String | Real | Real | Error | Error | Error |
String | Error | Error | String | Error | Error | Error | Error | Error |
Int32 | Real | Real | String | Int32 | Int64 | Error | Error | Error |
Int64 | Real | Real | String | Int64 | Int64 | Error | Error | Error |
Ptr | Error | Error | Error | Error | Error | Error | Error | Error |
undefined | Error | Error | Error | Error | Error | Error | Error | Error |
Array | Error | Error | Error | Error | Error | Error | Error | Error |
Subtract (-) | Real | Bool | String | Int32 | Int64 | Ptr | undefined | Array |
Real | Real | Real | Error | Real | Real | Error | Error | Error |
Bool | Real | Real | Error | Real | Real | Error | Error | Error |
String | Error | Error | Error | Error | Error | Error | Error | Error |
Int32 | Real | Real | Error | Int32 | Int64 | Error | Error | Error |
Int64 | Real | Real | Error | Int64 | Int64 | Error | Error | Error |
Ptr | Error | Error | Error | Error | Error | Error | Error | Error |
undefined | Error | Error | Error | Error | Error | Error | Error | Error |
Array | Error | Error | Error | Error | Error | Error | Error | Error |
Multiply (*) | Real | Bool | String | Int32 | Int64 | Ptr | undefined | Array |
Real | Real | Real | String | Real | Real | Error | Error | Error |
Bool | Real | Real | Error | Real | Real | Error | Error | Error |
String | Error | Error | Error | Error | Error | Error | Error | Error |
Int32 | Real | Real | String | Int32 | Int64 | Error | Error | Error |
Int64 | Real | Real | Error | Int64 | Int64 | Error | Error | Error |
Ptr | Error | Error | Error | Error | Error | Error | Error | Error |
undefined | Error | Error | Error | Error | Error | Error | Error | Error |
Array | Error | Error | Error | Error | Error | Error | Error | Error |
Divide (/) | Real | Bool | String | Int32 | Int64 | Ptr | undefined | Array |
Real | Real | Real | Error | Real | Real | Error | Error | Error |
Bool | Real | Real | Error | Real | Real | Error | Error | Error |
String | Error | Error | Error | Error | Error | Error | Error | Error |
Int32 | Real | Real | Error | Int32 | Int64 | Error | Error | Error |
Int64 | Real | Real | Error | Int64 | Int64 | Error | Error | Error |
Ptr | Error | Error | Error | Error | Error | Error | Error | Error |
undefined | Error | Error | Error | Error | Error | Error | Error | Error |
Array | Error | Error | Error | Error | Error | Error | Error | Error |
Divide (div) | Real | Bool | String | Int32 | Int64 | Ptr | undefined | Array |
Real | Real | Real | Error | Real | Real | Error | Error | Error |
Bool | Real | Real | Error | Real | Real | Error | Error | Error |
String | Error | Error | Error | Error | Error | Error | Error | Error |
Int32 | Real | Real | Error | Int32 | Int64 | Error | Error | Error |
Int64 | Real | Real | Error | Int64 | Int64 | Error | Error | Error |
Ptr | Error | Error | Error | Error | Error | Error | Error | Error |
undefined | Error | Error | Error | Error | Error | Error | Error | Error |
Array | Error | Error | Error | Error | Error | Error | Error | Error |
Mod (%) | Real | Bool | String | Int32 | Int64 | Ptr | undefined | Array |
Real | Real | Real | Error | Real | Real | Error | Error | Error |
Bool | Real | Real | Error | Real | Real | Error | Error | Error |
String | Error | Error | Error | Error | Error | Error | Error | Error |
Int32 | Real | Real | Error | Int32 | Int64 | Error | Error | Error |
Int64 | Real | Real | Error | Int64 | Int64 | Error | Error | Error |
Ptr | Error | Error | Error | Error | Error | Error | Error | Error |
undefined | Error | Error | Error | Error | Error | Error | Error | Error |
Array | Error | Error | Error | Error | Error | Error | Error | Error |
There are a few special constants that may or may not be equal to themselves, as shown in the following table:
Equality (==) | NaN | undefined | infinity |
NaN | false | false | false |
undefined | false | true | false |
infinity | false | false | true |