**Describe the bug**
`greatCircleAngle` function is very inaccurate for some arguments. Examples:

```
┌─greatCircleAngle(0, 45, 0.1, 45.1)─┐
│                         0.13063148 │
└────────────────────────────────────┘
But must be 0.1224388

┌─greatCircleAngle(0, 45, 1, 45)─┐
│                      0.8408964 │
└────────────────────────────────┘
Must be 0.7071023

┌─greatCircleAngle(0, 45, 1, 45.1)─┐
│                       0.84645635 │
└──────────────────────────────────┘
Must be 0.7135268
```
#include <DataTypes/DataTypesNumber.h>
#include <Columns/ColumnsNumber.h>
#include <Columns/ColumnConst.h>
#include <Common/typeid_cast.h>
#include <Common/assert_cast.h>
#include <Functions/IFunctionImpl.h>
#include <Functions/FunctionHelpers.h>
#include <Functions/FunctionFactory.h>
#include <Functions/TargetSpecific.h>
#include <Functions/PerformanceAdaptors.h>
#include <ext/range.h>
#include <cmath>
namespace DB
{
namespace ErrorCodes
{
    extern const int ILLEGAL_TYPE_OF_ARGUMENT;
}
/** Calculates the distance between two geographical locations.
  * There are three variants:
  * greatCircleAngle: calculates the distance on a sphere in degrees: https://en.wikipedia.org/wiki/Great-circle_distance
  * greatCircleDistance: calculates the distance on a sphere in meters.
  * geoDistance: calculates the distance on WGS-84 ellipsoid in meters.
  *