in some cases nan === nan

```
SELECT arrayCompact([1, 1, nan, nan, 2, 3, 3, 3]) AS x

┌─x───────────────┐
│ [1,nan,nan,2,3] │
└─────────────────┘

SELECT arrayCompact([1, 1, nan, nan, 2, 3, 3, inf, inf, 3]) AS x

┌─x─────────────────────┐
│ [1,nan,nan,2,3,inf,3] │
└───────────────────────┘

SELECT arrayCompact([1, 1, nan, nan, 2, 3, 3, inf, inf, 3, NULL, NULL]) AS x

┌─x──────────────────────┐
│ [1,nan,2,3,inf,3,NULL] │ ???
└────────────────────────┘

SELECT arrayCompact([1, 1, inf, nan, NULL, nan, nan]) AS x

┌─x────────────────────┐
│ [1,inf,nan,NULL,nan] │  ???
└──────────────────────┘
```
{
            auto src_offset = src_offsets[i];
            
            if (src_pos < src_offset)
            {
                
                res_values[res_pos] = src_values[src_pos];
                
                ++src_pos;
                ++res_pos;
                for (; src_pos < src_offset; ++src_pos)
                {
                    if (src_values[src_pos] != src_values[src_pos - 1])
                    {
                        res_values[res_pos] = src_values[src_pos];
                        ++res_pos;
                    }
                }
            }
            res_offsets[i] = res_pos;
        }
        res_values.resize(res_pos);
        res_ptr = ColumnArray::create(std::move(res_values_column), std::move(res_offsets_column));
        return true;
    }
    static void executeGeneric(const ColumnPtr & mapped, const ColumnArray & array, ColumnPtr & res_ptr)
    {
        const IColumn::Offsets & src_offsets = array.getOffsets();
        auto res_values_column = mapped->cloneEmpty();
        res_values_column->reserve(mapped->size());