Type Tables

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 (+)RealBoolStringInt32Int64PtrundefinedArray
RealRealRealStringRealRealErrorErrorError
BoolRealRealStringRealRealErrorErrorError
StringErrorErrorStringErrorErrorErrorErrorError
Int32RealRealStringInt32Int64ErrorErrorError
Int64RealRealStringInt64Int64ErrorErrorError
PtrErrorErrorErrorErrorErrorErrorErrorError
undefinedErrorErrorErrorErrorErrorErrorErrorError
ArrayErrorErrorErrorErrorErrorErrorErrorError

 

Subtract (-)RealBoolStringInt32Int64PtrundefinedArray
RealRealRealErrorRealRealErrorErrorError
BoolRealRealErrorRealRealErrorErrorError
StringErrorErrorErrorErrorErrorErrorErrorError
Int32RealRealErrorInt32Int64ErrorErrorError
Int64RealRealErrorInt64Int64ErrorErrorError
PtrErrorErrorErrorErrorErrorErrorErrorError
undefinedErrorErrorErrorErrorErrorErrorErrorError
ArrayErrorErrorErrorErrorErrorErrorErrorError

 

Multiply (*)RealBoolStringInt32Int64PtrundefinedArray
RealRealRealStringRealRealErrorErrorError
BoolRealRealErrorRealRealErrorErrorError
StringErrorErrorErrorErrorErrorErrorErrorError
Int32RealRealStringInt32Int64ErrorErrorError
Int64RealRealErrorInt64Int64ErrorErrorError
PtrErrorErrorErrorErrorErrorErrorErrorError
undefinedErrorErrorErrorErrorErrorErrorErrorError
ArrayErrorErrorErrorErrorErrorErrorErrorError

 

Divide (/)RealBoolStringInt32Int64PtrundefinedArray
RealRealRealErrorRealRealErrorErrorError
BoolRealRealErrorRealRealErrorErrorError
StringErrorErrorErrorErrorErrorErrorErrorError
Int32RealRealErrorInt32Int64ErrorErrorError
Int64RealRealErrorInt64Int64ErrorErrorError
PtrErrorErrorErrorErrorErrorErrorErrorError
undefinedErrorErrorErrorErrorErrorErrorErrorError
ArrayErrorErrorErrorErrorErrorErrorErrorError

 

Divide (div)RealBoolStringInt32Int64PtrundefinedArray
RealRealRealErrorRealRealErrorErrorError
BoolRealRealErrorRealRealErrorErrorError
StringErrorErrorErrorErrorErrorErrorErrorError
Int32RealRealErrorInt32Int64ErrorErrorError
Int64RealRealErrorInt64Int64ErrorErrorError
PtrErrorErrorErrorErrorErrorErrorErrorError
undefinedErrorErrorErrorErrorErrorErrorErrorError
ArrayErrorErrorErrorErrorErrorErrorErrorError

 

Mod (%)RealBoolStringInt32Int64PtrundefinedArray
RealRealRealErrorRealRealErrorErrorError
BoolRealRealErrorRealRealErrorErrorError
StringErrorErrorErrorErrorErrorErrorErrorError
Int32RealRealErrorInt32Int64ErrorErrorError
Int64RealRealErrorInt64Int64ErrorErrorError
PtrErrorErrorErrorErrorErrorErrorErrorError
undefinedErrorErrorErrorErrorErrorErrorErrorError
ArrayErrorErrorErrorErrorErrorErrorErrorError

 

Equality Table

There are a few special constants that may or may not be equal to themselves, as shown in the following table:

Equality (==)NaNundefinedinfinity
NaNfalsefalsefalse
undefinedfalsetruefalse
infinityfalsefalsetrue