```
SELECT roundBankers(mannWhitneyUTest('greater')(left, right).1, 16) as t_stat, roundBankers(mannWhitneyUTest('greater')(left, right).2, 16) as p_value FROM mann_whitney FORMAT TabSeparatedWithNames;
```

https://clickhouse-test-reports.s3.yandex.net/18488/1ddea6d7eed5cadce087cf19e51413440571a472/stress_test_(undefined)/stderr.log
#include <sys/mman.h>
#endif
#include <Common/PODArray_fwd.h>
/** Whether we can use memcpy instead of a loop with assignment to T from U.
  * It is Ok if types are the same. And if types are integral and of the same size,
  *  example: char, signed char, unsigned char.
  * It's not Ok for int and float.
  * Don't forget to apply std::decay when using this constexpr.
  */
template <typename T, typename U>
constexpr bool memcpy_can_be_used_for_assignment = std::is_same_v<T, U>
    || (std::is_integral_v<T> && std::is_integral_v<U> && sizeof(T) == sizeof(U));
namespace DB
{
namespace ErrorCodes
{
    extern const int CANNOT_MPROTECT;
}
/** A dynamic array for POD types.
  * Designed for a small number of large arrays (rather than a lot of small ones).
  * To be more precise - for use in ColumnVector.
  * It differs from std::vector in that it does not initialize the elements.
  *
  * Made noncopyable so that there are no accidental copies. You can copy the data using `assign` method.
  *
  * Only part of the std::vector interface is supported.
  *
  * The default constructor creates an empty object that does not allocate memory.
  * Then the memory is allocated at least initial_bytes bytes.
  *