javascript - Javascript:查找数字的所有根整数
问题描述
只是为了好玩,我正在尝试编写一个函数来告诉我一个数字的所有根。我不确定数学术语,但我想要这个数字,它的力量等于给定的数字。
例如,给定数字 1024 我会得到
{2:10, 4:5, 32:2}
(即:)2^10 = 4^5 = 32^2 = 1024
。
我实际上写了一个工作算法,但它遇到了浮点精度问题,我想知道是否有更好的方法。
这是我现在拥有的功能:
function findRoots(n) {
let result = {}
for (root = Math.floor(Math.sqrt(n)); root >= 2; root--) {
let test = n ** (1 / root)
if (Number.isInteger(test)) {
result[test] = root
}
}
return result
}
输出是一个对象,其中属性名称是根,值是指数。
但是,例如,如果我给它 16807(应该给我{7:5}
),我什么也得不到,因为我用来测试根的方法在浮点精度上阻塞(即16807 ** (1/5) == 7.000000000000001
)。
除了降低一些精度之外,有没有办法处理浮点数?
解决方案
您可以使用
if (Math.round(test) ** root == n) {
代替
if (Number.isInteger(test)) {
证明
由于我们使用Math.round(test)
,所以舍入误差test
不会造成任何问题。
推荐阅读
- java - 为什么在通过 OSHI API 从传感器检索信息时会发生这种情况?
- typescript - 如何在 VS Code 上使用 typescript 调试feathersjs?
- reactjs - React 钩子更新多个状态变量
- mysql - SQLSTATE[HY000] [1045] 用户 'qualitym_yaseen'@'localhost' 的访问被拒绝(使用密码:YES)
- angular - 如何获取 mat-table 的当前元素并放入代码的另一部分?
- python - 如何检查参数是否传递给函数?
- angular - TypeScript 构造函数重载无法识别类型
- javascript - 未处理的承诺拒绝警告
- xamarin.forms - Xamarin DatePicker 如何显示星期几?
- excel - 匹配参考数据中的 3+ 列