看到服务器做碰撞检测居然用了开放运算,很显然开方是牛顿迭代法是很耗CPU的,不过我来测试下:
#include <iostream>
#include <string>
#include <locale>
#include <random>
#include <set>
#include <stdio.h>
#include <windows.h>
#include <time.h> //time_t time() clock_t clock()
#include <Mmsystem.h> //timeGetTime()
#pragma comment(lib, "Winmm.lib") //timeGetTime()
using namespace std;
static std::default_random_engine m_Generator;
void SqrtTest(int n)
{
printf("%s\n", __FUNCTION__);
std::uniform_int_distribution<float> distribution(0, n);
DWORD dwGTCBegin = GetTickCount();
for (int i = 0; i < n; ++i)
{
float a = distribution(m_Generator);
float b = distribution(m_Generator);
float c = distribution(m_Generator);
float d = distribution(m_Generator);
float e = sqrt(a*a + b*b+ c*c);
if (e > d){
//printf(" ");
}
}
printf("%d\n", GetTickCount() - dwGTCBegin);
}
void SqureTest(int n)
{
printf("%s\n", __FUNCTION__);
std::uniform_int_distribution<float> distribution(0, n);
DWORD dwGTCBegin = GetTickCount();
for (int i = 0; i < n; ++i)
{
float a = distribution(m_Generator);
float b = distribution(m_Generator);
float c = distribution(m_Generator);
float d = distribution(m_Generator);
float e = a*a + b*b+ c*c;
if (e > d * d){
//printf(" ");
}
}
printf("%d\n", GetTickCount() - dwGTCBegin);
}
int main(void) {
int n = 10000000;
SqrtTest(n);
SqureTest(n);
}
千万次的计算 相差也不是很大,但毕竟这不是实际情况: