【提问】typescript如何求幂的逆运算

已知 2^N=8
如何求 N?
感觉是对数 Math.log()
可是他怎么只有1个参数……
我看其他的版本有 Math.log(8,2)这个意思的

新人求教


	/**获取2n次方 */
	export function get_power(value_n_: number): number {
		return 1 << (value_n_ - 1);
	}
	/**是否2n次方 */
	export function is_power(value_n_: number): boolean {
		return value_n_ > 0 && (value_n_ & (value_n_ - 1)) == 0;
	}
	/**相近2n次方 */
	export function similar_power(value_n_: number): number {
		let count_n = 0;
		for (; value_n_; ++count_n, value_n_ >>= 1);
		return count_n - 1;
	}

Math.log(8)/Math.log(2)

根据换底公式,有:

log_ab = ln(b) / ln(a)

Math.log(x) 的含义为 ln(x)。所以:

log_ab = Math.log(b) / Math.log(a)

见: Math.log() - JavaScript | MDN (mozilla.org)

要求幂的逆运算,可以使用 Math.pow() 函数的逆函数 Math.sqrt() 来实现。对于一个数 x 的 n 次幂,其逆运算就是求 x 的 1/n 次方,也就是求 x 的平方根的 n 次方。

以下是使用 TypeScript 语言实现求幂的逆运算的示例代码:

typescriptCopy code

function nthRoot(x: number, n: number): number {
  return Math.pow(x, 1 / n);
}

// 示例
console.log(nthRoot(8, 3)); // 输出 2,因为 2 的 3 次方等于 8

在上面的示例代码中,nthRoot 函数接受两个参数,分别是要求幂的逆运算的数 x 和指数 n,然后使用 Math.pow() 函数的逆函数 Math.sqrt() 来计算 x 的平方根的 n 次方,最后返回计算结果。在示例中,调用 nthRoot(8, 3) 函数将返回 2,因为 2 的 3 次方等于 8。

2赞

楼上怎么像是 ChatGPT…


是我没看懂需求么, 是不是 Math.log2(8) === 3 ?

且不说答非所问.

这种 位移小 trick 根本没必要封装成函数.
因为使用者不知道只能传入 整数.

get_power(2.5) // ??

又来胡说八道了,睁大你的眼睛好好看看,总是自己看不懂还装作一副指导别人的样子,真的笑死

image

  1. 别人可没说一定 2 为底数 / 指数, 不然也轮不到你在这炫这种小学生技巧…
  2. 位移操作算 2 n 方无非是为了性能最大化, 封装成函数反而抵消了这点好处, 还不如用 Math…
  3. 别人也没说 2^N 一定是整数

送你两句 自己说的话:

别强撑面子了

论坛里面一堆为了面子能指鹿为马的,笑死了,承认自己错误像要杀了自己一样

1赞

别人也没说 2^N 一定是小数,又来无中生有了

而且连 getComponent 都不承认对象类型比字符串参数好的人,气不过了就跑到这里鸡蛋里挑骨头,怕不是小学生,什么变态心理??

给大家看看你

再说到这个, 你既然发了个分 bundle 加载的帖子 (可惜可读性极差, 看一眼都浪费生命),

脚本分 bundle 加载, getComponent(‘也得用 string’) 哦

@1226085293

来了, 他又来了, 看看是谁在这 hold 不住了?

我这人看见误.人.子.弟的回答, 自然忍不住要踩一踩咯.

你那两句名言形容自己挺好的, 咋还炸mao了呢…哈哈. 其人之道而已.

1赞

这题我会, Math.log2(8)

你好,我可以帮你解答这个问题。:blush:

如果你想用 JavaScript 计算以 2 为底的对数,你可以用 Math.log() 方法,但是要注意它返回的是自然对数(以 e 为底)¹。所以,你需要用换底公式来得到以 2 为底的对数,即:

Math.log(8) / Math.log(2)

这样就可以得到 N 的值³。

另外,JavaScript 还提供了 Math.log2() 和 Math.log10() 方法,分别用来计算以 2 和 10 为底的对数⁴。

希望这能帮助你理解 JavaScript 中的对数运算。:blush:

Source: Conversation with Bing, 2023/2/27(1) Math.log() - JavaScript | MDN - Mozilla. Math.log() - JavaScript | MDN Accessed 2023/2/27.
(2) JavaScript Math log() Method - GeeksforGeeks. JavaScript Math log() Method - GeeksforGeeks Accessed 2023/2/27.
(3) Math.log() - JavaScript | MDN - Mozilla. Math.log() - JavaScript | MDN Accessed 2023/2/27.
(4) JavaScript Math.log() Examples [In-Depth Tutorial]. JavaScript Math.log() Examples [In-Depth Tutorial] | GoLinuxCloud Accessed 2023/2/27.
(5) JavaScript Math log() Method - W3Schools. JavaScript Math log() Method Accessed 2023/2/27.

一股 GPT 味~

/尴尬 /捂脸

这个结果其实没有问题啦,严谨点拿到的结果可以Math.floor一下

不要Math.floor, 要四舍五入, 因为结果可能是 1.9999999999999999994