# Comparison¶

## Six comparison operators¶

Syntax: (e.g.) x = y, =[x;y]

These binary operators work intuitively on numerical values (converting types when necessary), and apply also to lists, dicts, and tables. They are atomic.

Returns 1b where x and y are equal, else 0b.

q)"hello" = "world"
00010b
q)5h>4h
1b
q)0x05<4
0b
q)0>(1i;-2;0h;1b;0N;-0W)
010011b
q)5>=(ab!4 6)
a| 1
b| 0

Unlike Match, they are not strict about type.

q)1~1h
0b
q)1=1h
1b

Comparison tolerance applies when matching floats.

q)(1 + 1e-13) = 1
1b

< > = >= <= <> are multithreaded primitives.

For booleans, <> is the same as exclusive or (XOR).

## Temporal values¶

Particularly notice the comparison of ordinal with cardinal datatypes, such as timestamps with minutes.

q)times: 09:15:37 09:29:01 09:29:15 09:29:15 09:30:01 09:35:27
q)spans:timespan$times / timespans: cardinal q)stamps:.z.D+times / timestamps: ordinal q)t:09:29 / minute: cardinal When comparing ordinals with cardinals, ordinal is converted to the cardinal type first: stamps=t is equivalent to (minute$stamps)=t and thus

q)(stamps<t;stamps=t;stamps>t)
100000b
011100b
000011b
q)(spans<t;spans=t;spans>t)
100000b
000000b
011111b

Comparing temporals
Q for Mortals §4.9.1 Temporal Comparison

## Different types¶

The comparison operators also work on text values (characters, symbols) – not always intuitively.

q)"0" < ("4"; "f"; "F"; 4)  / characters are treated as their numeric value
1110b
q)"alpha" > "omega"         / strings are char lists
00110b
q)alpha > omega           / but symbols compare atomically
0b

When comparing two values of different types, the general rule (apart from those for temporal types above) is that the underlying values are compared.

## Nulls¶

Nulls of any type are equal.

q)n:(0Nh;0Ni;0N;0Ne;0n) / nulls
q)n =/:\: n
11111b
11111b
11111b
11111b
11111b

Any value exceeds a null.

q)inf: (0Wh;0Wi;0W;0We;0w)  / numeric infinities
q)n < neg inf
11111b

## Infinities¶

Infinities of different type are ordered by their width. In ascending order:

negative: -float < -real < -long < -int < -short
positive:  short <  int  <  long < real < float 
q)inf: (0Wh;0Wi;0W;0We;0w)    / numeric infinities in ascending type width
q)(>=) prior inf              / from short to float
11111b
q)(>=) prior reverse neg inf  / from -float to -short
11111b

This follows the rule above for comparing values of different types.

## deltas¶

Keyword deltas is a uniform unary function that returns the differences between items in its numeric list argument.

## differ¶

Keyword differ is a uniform unary function that returns a boolean list indicating where consecutive pairs of items in x differ.

## Match¶

Match (~) compares its arguments and returns a boolean atom to say whether they are the same.

Comparison tolerance
Q for Mortals §4.3.3 Order