草庐IT

c++ - 将 Sqrt(x) 计算为 x * InvSqrt(x) 在 Doom 3 BFG 代码中是否有意义?

我浏览了最近发布的Doom3BFGsourcecode,当我遇到一些似乎没有任何意义的事情时。Doom3在idMath中封装了数学函数。类(class)。有些函数只是从math.h转发给相应的函数,但有些是重新实现(例如idMath::exp16()),我认为它们的性能比它们的math.h对应物(可能以牺牲精度为代价)。然而,让我感到困惑的是他们实现floatidMath::Sqrt(floatx)函数的方式:ID_INLINEfloatidMath::InvSqrt(floatx){return(x>FLT_SMALLEST_NON_DENORMAL)?sqrtf(1.0f/x):I

c++ - 尽可能快地比较 (a + sqrt(b)) 形式的两个值?

作为我正在编写的程序的一部分,我需要比较a+sqrt(b)形式的两个值在哪里a和b是无符号整数。由于这是一个紧密循环的一部分,我希望这个比较尽可能快地运行。(如果重要的话,我在x86-64机器上运行代码,无符号整数不大于10^6。另外,我知道a1。)作为一个独立的功能,这是我想要优化的。我的数字是足够小的整数double(甚至float)可以准确地表示它们,但是sqrt中的舍入错误结果不能改变结果。//knownpre-condition:a1测试用例:is_smaller(900000,1000000,900001,998002)应该返回true,但正如@wim使用sqrtf()计算

c++ - 获取 sqrt(n) 整数部分的最快方法?

据我们所知,如果n不是一个完美的正方形,那么sqrt(n)不会是整数。由于我只需要整数部分,我觉得调用sqrt(n)不会那么快,因为计算小数部分也需要时间。所以我的问题是,我们能不能只得到sqrt(n)的整数部分而不计算sqrt(n)的实际值??该算法应该比sqrt(n)更快(在或中定义)?如果可能,您可以将代码写入asm也阻止。 最佳答案 我会尝试FastInverseSquareRoot把戏。这是一种在没有任何分支的情况下获得1/sqrt(n)的非常好的近似值的方法,基于一些比特旋转,因此不可移植(尤其是在32位和64位平台之间

python - 在 Python : x**. 5 或 math.sqrt(x) 中哪个更快?

我一直在想这个问题。正如标题所说,哪个更快,实际功能还是简单地提高到一半?更新这不是过早优化的问题。这只是底层代码如何实际工作的问题。Python代码的工作原理是什么?我给GuidovanRossum发了一封电子邮件,因为我真的很想知道这些方法的区别。我的邮箱:Thereareatleast3waystodoasquarerootinPython:math.sqrt,the'**'operatorandpow(x,.5).I'mjustcuriousastothedifferencesintheimplementationofeachofthese.Whenitcomestoeffic

c++ - 何时使用 `std::hypot(x,y)` 而不是 `std::sqrt(x*x + y*y)`

documentationofstd::hypot说:Computesthesquarerootofthesumofthesquaresofxandy,withoutundueoverfloworunderflowatintermediatestagesofthecomputation.我很难构思一个测试用例,其中应该使用std::hypot而不是琐碎的sqrt(x*x+y*y)。以下测试表明std::hypot比简单计算慢了大约20倍。#include#include#include#includeintmain(int,char**){std::mt19937_64mt;const

c++ - 何时使用 `std::hypot(x,y)` 而不是 `std::sqrt(x*x + y*y)`

documentationofstd::hypot说:Computesthesquarerootofthesumofthesquaresofxandy,withoutundueoverfloworunderflowatintermediatestagesofthecomputation.我很难构思一个测试用例,其中应该使用std::hypot而不是琐碎的sqrt(x*x+y*y)。以下测试表明std::hypot比简单计算慢了大约20倍。#include#include#include#includeintmain(int,char**){std::mt19937_64mt;const

c++ - 在 C++11 中,sqrt 定义为 constexpr?

在C++11中,std::sqrt被定义为constexpr,即它可以合法地从其他constexpr函数中使用,或者在像数组大小或模板参数这样的编译时上下文?g++似乎允许它(使用-std=c++0x),但鉴于c++0x/c++11支持仍然不完整,我不确定我是否可以将其视为权威.我似乎无法在Internet上找到任何东西这一事实让我不确定。似乎这应该是使用Google可以轻松找到的内容,但我已经尝试过(现在已经40分钟......)但找不到任何东西。我可以找到一些将constexpr添加到标准库的各个部分的建议(例如thisone),但没有关于sqrt或其他数学函数的内容。

c++ - 在 C++11 中,sqrt 定义为 constexpr?

在C++11中,std::sqrt被定义为constexpr,即它可以合法地从其他constexpr函数中使用,或者在像数组大小或模板参数这样的编译时上下文?g++似乎允许它(使用-std=c++0x),但鉴于c++0x/c++11支持仍然不完整,我不确定我是否可以将其视为权威.我似乎无法在Internet上找到任何东西这一事实让我不确定。似乎这应该是使用Google可以轻松找到的内容,但我已经尝试过(现在已经40分钟......)但找不到任何东西。我可以找到一些将constexpr添加到标准库的各个部分的建议(例如thisone),但没有关于sqrt或其他数学函数的内容。

C语言中的sqrt函数

目录:                前言:声明:搭建环境:专栏:sqrt函数的参数与返回值:简单的实践:问题:讨论:改进:前言:在日常生活中,我们往往会需要使用到计算机进行庞大的运算,例如求一个数的平方根。在本章中我会教大家编写一个叫”求一个数的平方根“的程序。但我们在没学到C语言sqrt函数之前写这个程序未免有些许困难,但在学完sqrt函数后,我们会大幅度降低编写的难度,所以我们在编写”求一个数的平方根“程序时必须得要学习sqrt函数,但在学习sqrt函数之前我们必须要搭建环境才可使用sqrt函数。为什么做这个程序要学习sqrt函数呢?因为sqrt函数正是求一个数的平方根。声明:撰写本文章

C语言中的sqrt函数

目录:                前言:声明:搭建环境:专栏:sqrt函数的参数与返回值:简单的实践:问题:讨论:改进:前言:在日常生活中,我们往往会需要使用到计算机进行庞大的运算,例如求一个数的平方根。在本章中我会教大家编写一个叫”求一个数的平方根“的程序。但我们在没学到C语言sqrt函数之前写这个程序未免有些许困难,但在学完sqrt函数后,我们会大幅度降低编写的难度,所以我们在编写”求一个数的平方根“程序时必须得要学习sqrt函数,但在学习sqrt函数之前我们必须要搭建环境才可使用sqrt函数。为什么做这个程序要学习sqrt函数呢?因为sqrt函数正是求一个数的平方根。声明:撰写本文章