Если бы мы собирались оптимизировать это, потому что он запускался миллиарды раз, я бы решил это, используя метод unwind , и затем распараллеливая его, используя SIMD. Есть несколько разных способов сделать это. Вы можете просто сделать все вычитания (x2-x1, y2-y1, z2-z1) в одной операции, а затем умножить также в одной операции. Таким образом, вы парализуетесь внутри метода, не перепроектируя свой алгоритм.
Или вы можете написать массовую версию, которая вычисляет (x2-x1) ^ 2 + (y2-y1) ^ 2 + (z2-z1) ^ 2 - r ^ 2 для многих элементов и сохраняет результаты в массиве. Возможно, вы получите лучшую пропускную способность, но это означает пересмотр вашего алгоритма и зависит от того, для чего используются тесты.
Вы также можете легко оптимизировать это, используя что-то вроде OpenMP, если вы действительно выполняете много тестов подряд.