精易论坛

标题: X的Y次方等于Z,知道Z和Y的情况下,怎么快速计算X [打印本页]

作者: 星马豪    时间: 2024-11-9 17:01
标题: X的Y次方等于Z,知道Z和Y的情况下,怎么快速计算X
例如6.6的2.6次方等于135.149,知道135.149和2.6次方的情况下,怎么快速计算出6.6     除了一个个试出值这种方法。

PS:次方数非整数,且计算的数值都比较大或小数位较多。


或者有可以高精度计算非整数次方的方法吗。

作者: 观音    时间: 2024-11-9 17:01
  
子程序名返回值类型公开备 注
getBaseNumber双精度小数型 
参数名类 型参考可空数组备 注
result双精度小数型
index双精度小数型
变量名类 型静态数组备 注
baseNumber双精度小数型 
baseNumber = 求反对数 (求自然对数 (result) ÷ index)
返回 (四舍五入 (baseNumber, 2))

作者: slidetoshutdown    时间: 2024-11-9 17:21
用对数来解决,这是最简单的方法。

如果 X^Y = Z
那么取两边的对数:
log(X^Y) = log(Z)
根据对数的性质:Y * log(X) = log(Z)
所以 X = e^(log(Z)/Y)

用你的例子算一下:
Z = 135.149
Y = 2.6
X = e^(log(135.149)/2.6)
X ≈ 6.6

如果Z是负数,这个方法就不能用,因为负数没有实数对数。

作者: 神女软件定制    时间: 2024-11-9 17:27
Math.log(135.149)/Math.log(6.6)
作者: 观音    时间: 2024-11-9 17:27


作者: 星马豪    时间: 2024-11-9 17:51
观音 发表于 2024-11-9 17:27
[e=0].版本 2

.子程序 getBaseNumber, 双精度小数型

哇靠,牛逼,唤醒我课堂睡梦中的记忆了。我自己写了个每次乘以10快速判断数值区间,然后不断接近结果的方法,比每次加0.01计算快多了。本还沾沾自喜,大佬这一下,瞬间让我理解了什么叫做降维打击
作者: 星马豪    时间: 2024-11-9 17:55
观音 发表于 2024-11-9 17:27
[e=0].版本 2

.子程序 getBaseNumber, 双精度小数型

想问一下,有可以计算非整数次方的方法吗




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4