社区
数据结构与算法
帖子详情
C库函数log、sqrt的时间复杂度是多少?
Octogen
2003-06-30 02:54:32
是O(1)吗?
看了个验证完全平方数的贴子想起来的。
...全文
3460
13
打赏
收藏
C库函数log、sqrt的时间复杂度是多少?
是O(1)吗? 看了个验证完全平方数的贴子想起来的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Octogen
2003-07-02
打赏
举报
回复
我也不太懂,都是刚从处理器手册里看的。
dcyu
2003-07-01
打赏
举报
回复
楼主能否介绍一下浮点协处理器还有哪些运算?
alphapaopao
2003-07-01
打赏
举报
回复
sqrt log 这样的函数,都是调用相应的CPU指令,也就是说函数本身不作数值运算。
在intel 的CPU手册上可以看到,这些初等函数消耗的CPU周期都是有一个范围的。所以
这些函数可以当成常数复杂度来看待。这些函数所消耗的时间和你的问题的规模没关系。
============================================================================
提问题时标题要简明扼要地说明问题内容,切忌使用"急","求救"之类不能说明问题的标题
http://alphasun.betajin.com/ 遇到问题可以给我发消息,给我发信息时请附带原帖地址
DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
寻开心
2003-07-01
打赏
举报
回复
sqrt比log要费时间。
好的做法是先查询表格,然后使用迭代方法获得更精确的数据。
ZhangYv
2003-07-01
打赏
举报
回复
sqrt似乎是用斯特劳林公式展开后求近似的.肯定不是O(1)
Octogen
2003-07-01
打赏
举报
回复
嗯,搜了一下Quake3的源代码,只找到sqrt的,好象是利用级数展开式做近似计算。
估计VC的RTL也一样,只不过是用汇编实现罢了。
double sqrt( double x )
{
float y;
float delta;
float maxError;
if ( x <= 0 ) {
return 0;
}
// initial guess
y = x / 2;
// refine
maxError = x * 0.001;
do {
delta = ( y * y ) - x;
y -= delta / ( 2 * y );
} while ( delta > maxError || delta < -maxError );
return y;
}
Octogen
2003-07-01
打赏
举报
回复
这些在Intel的CPU手册里能找到详细的说明。没有问题的话我就结贴了。
BlueSky2008
2003-07-01
打赏
举报
回复
刚才用VC找了一下sqrt,log的源码,结果是没找到源码,只有汇编代码。
本来汇编学的就不好,这两个函数的代码里还尽是从没见过的数学指令,看得头都大了。
不过有一点还是可以确定的,这两个函数都没有自己计算,而是直接用了数学指令,
不过我不太同意dcyu的观点,计算机内这些数学指令不可能用模拟电路实现的,应该还是数字电路,
这些指令实际上相当于一段微程序,只是不知道他算法怎样。记得以前看过一本计算机组成原理,
有讲这些复杂数学函数的计算的,可惜没认真看。:(
alphapaopao
2003-07-01
打赏
举报
回复
Riemann():
哦,这个可能黎曼兄有所不知了。
sqrt, sin, cos, log 等指令属于FPU的指令,不是CPU指令,不过现在的FPU都是可CPU坐在一个芯片上的。
FPU 就是浮点协处理器,他专门负责浮点运算,还负责初等函数的求值,另外它还内置了很多常量,比如 PI, e 等。
我曾看到浮点协处理器的 specification , intel 出版的,sin 这样的函数,在 100 个周期左右,具体我也记不清楚了。
dcyu
2003-07-01
打赏
举报
回复
1
数字电路也是可以做出对数电路的,数字电路可以完成模拟电路可以实现的一切运算。
浮点型cpu我想这方面的设计会很复杂,估计会消耗几百个cpu时间周期。
Octogen
2003-07-01
打赏
举报
回复
多谢各位!Intel有相应的浮点指令:
FSQRT 求平方根
FYL2X 求以2为底的对数
还有SIN、COS什么的。我想一向以效率著称的Quake3应该是为了可移植性才用C实现的这些函数吧?
Riemann
2003-07-01
打赏
举报
回复
如果真有相应的sqrt,log之类的机器指令,那在汇编中也应该存在相应的基本算术操作了,可是汇编却没有提供。我更倾向于sqrt,log都是通过执行一系列的+,-,*,/操作来实现的这种说法。
dcyu
2003-06-30
打赏
举报
回复
虽然不知道,但我觉得CPU中会有求对数的指令,因为在模拟电路中可以通过二极管的特性做出求对数的电路,CPU的电路也应该会有这方面的设计。是我的一个猜想,虽然没学过这方面的课程。
标准C+C++
库函数
参考、包括(基本C/C++、C++、标准 C 库)
C/C++ 语言参考。 包括(基本C/C++、C++、标准 C 库)
有效的完全平方数(二分查找)1
示例 1:输入:16示例 2:输入:14bool isPerfectSquare(int num) {if((long)mid*mid
java面试题-leetcode题解之第69题x的平方根.zip
java面试题 java面试题_leetcode题解之第69题x的平方根
shushu.rar_Prime number _标准库_素数
求素数的程序,用了一些标准库.不难,但很有用
C语言
库函数
大全与实战应用
本文还有配套的精品资源,点击获取 简介:C语言
库函数
是编程中不可或缺的工具,提供了标准输入输出、数学计算、字符串操作、内存管理、错误处理等基础功能。掌握这些
库函数
对每个C程序员而言是基本要求。本文详细介绍了输入输出、数学、字符串处理、内存管理、错误处理等领域的常用函数及其用法,同时强调了理解参数、返回值和潜在错误的重要性。通过熟悉标准库头文件和实践应用,可以有效提升编程效率...
数据结构与算法
33,025
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章