)]}'
{
  "commit": "f1e83073082f2733eec6235f2fdf251217a54ade",
  "tree": "a20a4945bf0083ffe1a4d4a617a7a2c4740ba00a",
  "parents": [
    "2cb2915f908418c897773e0342f152768c13a0d8"
  ],
  "author": {
    "name": "Rasmus Munk Larsen",
    "email": "rmlarsen@google.com",
    "time": "Fri Nov 15 17:09:46 2019 -0800"
  },
  "committer": {
    "name": "Rasmus Munk Larsen",
    "email": "rmlarsen@google.com",
    "time": "Fri Nov 15 17:09:46 2019 -0800"
  },
  "message": "1. Fix a bug in psqrt and make it return 0 for +inf arguments.\n2. Simplify handling of special cases by taking advantage of the fact that the\n   builtin vrsqrt approximation handles negative, zero and +inf arguments correctly.\n   This speeds up the SSE and AVX implementations by ~20%.\n3. Make the Newton-Raphson formula used for rsqrt more numerically robust:\n\nBefore: y \u003d y * (1.5 - x/2 * y^2)\nAfter: y \u003d y * (1.5 - y * (x/2) * y)\n\nForming y^2 can overflow for very large or very small (denormalized) values of x, while x*y ~\u003d 1. For AVX512, this makes it possible to compute accurate results for denormal inputs down to ~1e-42 in single precision.\n\n4. Add a faster double precision implementation for Knights Landing using the vrsqrt28 instruction and a single Newton-Raphson iteration.\n\nBenchmark results: https://bitbucket.org/snippets/rmlarsen/5LBq9o\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "da1b1e3f86362096dd7aade32e4439bdf038af22",
      "old_mode": 33188,
      "old_path": "Eigen/src/Core/arch/AVX/MathFunctions.h",
      "new_id": "c5394430ffb419ef5cd7d312cd571e391d9fc416",
      "new_mode": 33188,
      "new_path": "Eigen/src/Core/arch/AVX/MathFunctions.h"
    },
    {
      "type": "modify",
      "old_id": "273c22c18be8054f4d226934d5b88b8a7b47668b",
      "old_mode": 33188,
      "old_path": "Eigen/src/Core/arch/AVX512/MathFunctions.h",
      "new_id": "0346c1d9511e9929e2a74e9a94562822d1c2f6e5",
      "new_mode": 33188,
      "new_path": "Eigen/src/Core/arch/AVX512/MathFunctions.h"
    },
    {
      "type": "modify",
      "old_id": "b21bb93bf458487b45477e01621000bc337e3c04",
      "old_mode": 33188,
      "old_path": "Eigen/src/Core/arch/SSE/MathFunctions.h",
      "new_id": "85255ad23029df0eb5334d936f99391044afc4fb",
      "new_mode": 33188,
      "new_path": "Eigen/src/Core/arch/SSE/MathFunctions.h"
    },
    {
      "type": "modify",
      "old_id": "d652082b023b3c640d67fe2a7ffe8116b8ac38e7",
      "old_mode": 33188,
      "old_path": "test/packetmath.cpp",
      "new_id": "64dd3dbf6d520665fde6ba45b4a5cd5c5b93803e",
      "new_mode": 33188,
      "new_path": "test/packetmath.cpp"
    }
  ]
}
