开方运算的消耗

看到服务器做碰撞检测居然用了开放运算,很显然开方是牛顿迭代法是很耗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);
}

千万次的计算 相差也不是很大,但毕竟这不是实际情况:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Verilog中实现开方运算可以采用不同的算法,其中一种常用的算法是二分迭代法。该算法通过不断逼近开方的结果,直到满足一定的精度要求。 在Verilog中描述二分迭代法的开方运算,可以按照以下步骤进行: 1. 定义输入和输出信号:输入信号可以是待开方的数值,输出信号是开方的结果。 2. 设计状态机:根据引用\[2\]中提到的状态转换图和输出信号表,设计一个状态机来控制计算的过程。状态机可以包括空闲状态(IDLE)、计算状态(CALC)和完成状态(DONE)。 3. 实现计算逻辑:在计算状态(CALC)中,使用二分迭代法来逼近开方的结果。可以使用循环或递归的方式进行迭代计算,直到满足精度要求。 4. 输出结果:在完成状态(DONE)中,将计算得到的开方结果输出。 需要注意的是,在Verilog中实现开方运算需要考虑数据的位宽和精度要求,以及适当的时钟周期和时序设计。具体的实现细节可以根据具体的需求进行调整。 综上所述,可以使用Verilog描述二分迭代法的开方运算,通过设计状态机和计算逻辑来实现该功能。 #### 引用[.reference_title] - *1* *2* *3* [三种常见平方根算法的电路设计及Verilog实现与仿真](https://blog.csdn.net/weixin_44699856/article/details/130438117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值