带有参数限制的定点幂函数的高效实现
我正在寻找函数pow(a, b)的有效实现,其中a仅限于Interval (0,1),而b是>= 1(两个都是实数 - I.E.,不一定是整数). 如果有帮助,b不是一个很高的数字 - LET说它小于10-20.这将打开可能通过少量迭代〜= b 迭代解决此问题的可能性 该代码应在32位微控制器上使用,可能没有浮点单元(即使用定点实现). 如何实现针对以下约束进行优化的功能?我正在寻找算法本身,因此伪代码是可以接受的. 解决方案 OP所述的问题已被指定.需要什么精度,需要什么性能?由于已知a是非负的,因此合适的起点是将A b 按exp2 (b * log2 (a))计算,并为这些功能进行定义实现.根据我在嵌入式系统中固定点算术的经验,使用S15.16固定点格式通常是在代表范围和准确性之间的良好折衷,当通用浮点计算被固定点计算替换时.所以我会在这里采用. 在固定点中实现exp2()和log2()的主要选择是位计算,表中的二次插值和多项式近似.后两个受益于可以产生
6 2024-01-23
编程技术问答社区
Math.Pow(等等)的实际工作原理
所以我已经谷歌搜索了很长时间,但我几乎没有发现.我找到了一些有关Math.pow的可能实现的信息. " nofollow noreferrer">此url ,但是它们不准确,例如此代码 public static double PowerA(double a, double b) { int tmp = (int)(BitConverter.DoubleToInt64Bits(a) >> 32); int tmp2 = (int)(b * (tmp - 1072632447) + 1072632447); return BitConverter.Int64BitsToDouble(((long)tmp2)
4 2024-01-22
编程技术问答社区
MATH.POW()被打破
不,这不涉及整数划分或浮点舍入问题. 我的确切代码是: static void Main(string[] args) { double power = (double)1.0 / (double)7.0; double expBase = -128.0; System.Console.WriteLine("sanity check: expected: -128 ^ 0.142857142857143 = -2. actual: " + expBase + " ^ " + power + " = " + Math.Pow(expBase, power)); System.Console.ReadLine(); } 输出为: sanity check: expected: -128 ^ 0.142857142857143 = -2. actual: -128 ^ 0.
16 2024-01-03
编程技术问答社区
Math.Pow与乘法运算符(性能)的比较
有人知道乘运算符是否比使用Math.pow方法快吗?喜欢: n * n * n vs Math.Pow ( n, 3 ) 解决方案 基本上,您应该基准看到. 受过教育的猜测(不可靠): 如果某些编译器未对其进行优化,则 x * x * x很可能比Math.Pow(x, 3)快,因为Math.Pow在其一般情况下必须处理问题,处理分数和其他问题,而x * x * x只会采取几个乘法指令,所以很可能会更快. 其他解决方案 我只是重新安装了窗口,因此没有安装Visual Studio,并且代码很丑陋 using System; using System.Diagnostics; public static class test{ public static void Main(string[] args){ MyTest(); PowTest(); } static void PowTest(){ var sw =
12 2024-01-03
编程技术问答社区
Math.Pow()在.NET框架中是如何实现的?
我正在寻找一种有效的方法来计算 b (例如a = 2和b = 50).为了开始工作,我决定看一下Math.Pow()函数的实现.但是在 .net反射器 [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical] public static extern double Pow(double x, double y); 我可以看到哪些资源在我打电话Math.Pow()函数时可以看到什么? 解决方案 MethodImplOptions.InternalCall 这意味着该方法实际上是在C ++编写的CLR中实现的.即时的编译器使用内部实现的方法咨询表格,并直接编译到C ++函数的调用. 查看代码需要CLR的源代码.您可以从 sscli20发行中获得.它是在.NET 2.0时间范围内写的,我发现了低级实现,例如Math.Pow()仍然很准确地用于Clr的后期版本. 查找表位于clr/sr
0 2024-01-02
编程技术问答社区
如何在X86中使用pow(real, real)?
我正在寻找x86汇编中pow(real, real)的实现.我也想了解该算法的工作原理. 解决方案 只需将其计算为2^(y*log2(x)). 有一个x86指令fyl2x来计算y*log2(x)和x86指令f2xm1进行指控. F2XM1需要在[-1,1]范围内的参数,因此您必须在介于两者之间添加一些代码才能提取整数零件和剩余的零件,并指定其余部分,使用FSCALE通过适当的功率为2的结果来扩展结果. 其他解决方案 好吧,我在x86中实现了power(double a, double b, double * result);. 代码: http://pastebin.com/vwfe9czt %define a QWORD [ebp+8] %define b QWORD [ebp+16] %define result DWORD [ebp+24] %define ctrlWord
2 2023-12-15
编程技术问答社区
PHP表的循环?
此代码生成一个带有100行和2列的表.但是,我想做的是在划船的左侧显示有序的数字(UPP至100),并在Rowcells的右侧显示其他东西(例如POW(ROWNUMBER)).我该怎么做? 解决方案 尝试一下,将在两个列中输出100行及其功率
4 2023-12-03
编程技术问答社区
帽子^运算符与Math.Pow()的比较
仔细阅读了显然有一个差异是一个函数,而另一个被视为运算符,例如这将行不通: Public Const x As Double = 3 Public Const y As Double = Math.Pow(2, x) ' Fails because of const-ness 但这将是: Public Const x As Double = 3 Public Const y As Double = 2^x 但是它们如何产生最终结果有区别吗? Math.Pow()例如,做更多的安全检查吗?还是一个只是某种别名? 解决方案 找出答案的一种方法是检查IL.对于: Dim x As Double = 3 Dim y As Double = Math.Pow(2, x) il是: IL_0000: nop IL_0001: ldc.r8 00 00 00 00 00 00 08 40 IL_000A: stloc.0
2 2023-11-14
编程技术问答社区
C/C++中pow()函数的实现是否因平台或编译器而异?
花了一天的时间来调试内置pow()函数的输出.我的编译器和在线编译器之间的输出不同.那是一个长篇小说.我写了以下最小,完整和可验证的示例重现了情况. 代码: #include using namespace std; // This function just prints the binary representation as it is in memory // A modified version of Lightness Races in Orbit's code given here: https://stackoverflow.com/a/37861479/3555000 // I thank Lightness Races in Orbit for the contribution void print_binary(long double y) { const long double x = y; unsig
8 2023-10-17
编程技术问答社区
如何在Swift语言中获得某个整数的功率?
我最近在学习Swift,但是我有一个基本问题,找不到答案 我想得到 之类的东西 var a:Int = 3 var b:Int = 3 println( pow(a,b) ) // 27 但是POW函数只能与双数一起使用,它不适用于整数,我什至无法将INT施加到double(a)或a.double()... 为什么它不提供整数的力量?它肯定不会毫无歧义返回整数! 为什么我不能将整数施加到双重呢?它只是将3到3.0(或3.00000 ... whitch) 如果我有两个整数并且想进行电源操作,我该如何顺利进行? 谢谢! 解决方案 如果您愿意,可以声明infix operator进行. // Put this at file level anywhere in your project infix operator ^^ { associativity left precedence 160 } func ^^ (radix: Int, pow
10 2023-10-07
编程技术问答社区
为SSE类型提供粉末
我使用SSE类型进行了一些明确的矢量化计算,例如__m128(xmmintrin.h等),但是现在我需要将矢量的所有元素提高到某些(相同)的功能,即理想情况下,我希望__m128 _mm_pow_ps(__m128, float)之类的东西,不幸的是不存在. 这是什么最好的方法?我可以将向量存储,在每个元素上调用std::pow,然后重新加载.这是我能做的最好的吗?当自动矢量化代码否则可以很好地矢量时,编译器如何实现std::pow的呼叫?有没有提供有用的库? (请注意,这个问题当然没有一个有用的答案.) 解决方案 使用公式exp(y*log(x))用于pow(x, y)和pow(x, y)和 library with sse exp()和log()的实现. @ royi : 以上仅适用于x和y的情况.否则需要更仔细的数学.参见 https://math.stackexchange.com/questions/questions/2089690 . 其他解
14 2023-09-26
编程技术问答社区
用C语言中的POW功能颠倒一个五位数的数字
我有一个练习,要求使用POW恢复五位数的程序,这是我的尝试: #include #include void main( void ) { int number, counter = 0, last_digit, reversed = 0; printf( "Please type a five digit number and I will reverse it\n" ); scanf( "%d", &number ); for( counter = 4; counter >= 0; counter-- ) { last_digit = number % 10; number = number / 10; //printf( "%d %d %.0f %.0f\n\n", reversed, last_digit, pow ( 10, counter )
10 2023-08-11
编程技术问答社区
使用递归的幂函数
我必须在Java中编写一个电源方法.它收到两个INT,是正数还是负数.它的复杂性应为O(logN).它还必须使用递归.我当前的代码有两个数字,但是我继续输出的结果为零,我不知道为什么. import java.util.Scanner; public class Powers { public static void main(String[] args) { float a; float n; float res; Scanner in = new Scanner(System.in); System.out.print("Enter int a "); a = in.nextFloat(); System.out.print("Enter int n "); n = in.nextFloat(); res = powe
4 2023-08-02
编程技术问答社区
使用递归将一个基数提高到其指数级-C++
我只想编写一些使用功能递归来提高其力量的代码.我知道递归不是在C ++中做事的最正确的方法,但我只想探索一些概念.该程序向用户询问基础和指数,然后启用答案.这是我编写的程序: #include #include using namespace std; int raisingTo(int, int); int main() { int base, exponent; cout > base; cout > exponent; int answer = raisingTo(base, exponent); cout > resp
10 2023-08-02
编程技术问答社区
递归功率函数:方法
我已经编程了一段时间(初学者),递归功能对我来说是一个抽象的概念.我不会说我卡住了,程序正常,我只是想知道是否可以在没有POW功能的情况下编写该功能本身(但仍在做问题所建议的问题) ) 问题: http://prntscr.com/30hxg9 我的解决方案: #include #include int power(int, int); int main(void) { int x, n; printf("Enter a number and power you wish to raise it to: "); scanf_s("%d %d", &x, &n); printf("Result: %d\n", power(n, x)); return 0; } int power(int x, int n) { if (n == 0) return 1; if (n % 2
8 2023-08-02
编程技术问答社区
使用pow函数计算mod
所以,如果我想使用POW函数计算6^8 mod 5的值,我该放在行中? 假设您不需要首先导入 我知道POW被使用像POW(X,Y)= POW(6,8)= 6^8 和 我的猜测是 mod.pow(6,8) 谢谢! 解决方案 这很简单:pow对模量进行可选的第三参数. 来自 docs : pow(x, y[, z]) 返回X到功率y;如果存在z,请返回x恢复p,modulo z(比pow(x, y) % z)更有效地计算出. 两种词汇表(x,y)等同于使用电源运算符: x**y. 所以您想要: pow(6, 8, 5) 不仅pow(x, y, z)比(x ** y) % z更快,更有效地,而且在不使用任意精度算术的情况下,它可以轻松地处理y的大值,假设z是一个简单的机器整数. . 其他解决方案 检查 pow :pow(6, 8, 5) 做你想要的. do 不是使用a ** b % n!虽然这将给出正确
16 2023-07-17
编程技术问答社区
为什么2**100比math.pow(2,100)快那么多?
在讨论问题时 python x中的指数 alfe 使用math.pow而不是python中的**运算符. TimeIt表明,在所有情况下,Math.pow都比**慢.什么是Math.pow()对什么有益?有人知道它可以有任何优势吗? 我们试图用一些timeit参数互相说服. . import timeit print timeit.timeit("math.pow(2, 100)",setup='import math') print timeit.timeit("2.0 ** 100.0") print timeit.timeit("2 ** 100") print timeit.timeit("2.01 ** 100.01") 输出: 0.329639911652 0.0361258983612 0.0364260673523 0.0363788604736 在 是否有一个简单的解释差异 [1] 我们观察到? [1] math.pow和**的性
8 2023-07-02
编程技术问答社区
python中的负pow
我有这个问题 >>> import math >>> math.pow(-1.07,1.3) Traceback (most recent call last): File "", line 1, in ValueError: math domain error 有什么建议吗? 解决方案 (-1.07) 1.3 将不是实际号码,因此数学域错误. 如果您需要一个复杂的数字,则必须将 b 重写为e b ln a ,例如 >>> import cmath >>> cmath.exp(1.3 * cmath.log(-1.07)) (-0.6418264288034731-0.8833982926856789j) 如果您只想返回Nan,请捕获该例外. >>> import math >>> def pow_with_nan(x, y): ... try: ... return math.pow(x
14 2023-06-22
编程技术问答社区