Save for the last case (a poor try at showing floating point equality isn't reflexive), these examples seem specially surprising due to the base-conversion involved (since input is decimal and the floating point numbers used are binary), which hides the actual number of significant digits involved in each case.
python
>>> 0.1 + 0.2 == 0.3
False
>>> 1E19*1E-20 == 1E-1
False
>>> 0.1+(0.2+0.3) == (0.1+0.2)+0.3
False
>>> 0.1+0.2+0.3 == 0.3+0.2+0.1
False
>>> 100*(0.1 + 0.2) == 100*0.1 + 100*0.2
False
>>> import numpy
>>> numpy.float64(0.0)/numpy.float64(0.0) == numpy.float64(0.0)/numpy.float64(0.0)
False
irb
irb(main):001:0> 0.1 + 0.2 == 0.3
=> false
irb(main):002:0> 1E19*1E-20 == 1E-1
=> false
irb(main):003:0> 0.1+(0.2+0.3) == (0.1+0.2)+0.3
=> false
irb(main):004:0> 0.1+0.2+0.3 == 0.3+0.2+0.1
=> false
irb(main):005:0> 100*(0.1 + 0.2) == 100*0.1 + 100*0.2
=> false
irb(main):006:0> 0.0/0 == 0.0/0
=> false
julia> 0.1 + 0.2 == 0.3
false
julia> 1E19*1E-20 == 1E-1
false
julia> 0.1+(0.2+0.3) == (0.1+0.2)+0.3
false
julia> 0.1+0.2+0.3 == 0.3+0.2+0.1
false
julia> 100*(0.1 + 0.2) == 100*0.1 + 100*0.2
false
julia> 0.0/0 == 0.0/0
false
> 0.1 + 0.2 == 0.3
false
> 1E19*1E-20 == 1E-1
false
> 0.1+(0.2+0.3) == (0.1+0.2)+0.3
false
> 0.1+0.2+0.3 == 0.3+0.2+0.1
false
> 100*(0.1 + 0.2) == 100*0.1 + 100*0.2
false
> 0/0 == 0/0
false
> 0.1 + 0.2 == 0.3
[1] FALSE
> 1E19*1E-20 == 1E-1
[1] FALSE
> 0.1+(0.2+0.3) == (0.1+0.2)+0.3
[1] FALSE
> 0.1+0.2+0.3 == 0.3+0.2+0.1
[1] FALSE
> 100*(0.1 + 0.2) == 100*0.1 + 100*0.2
[1] FALSE
> 0.0/0 == 0.0/0
[1] NA
>