取大于 2 的根

Taking a root higher than 2

本文关键字:的根 大于      更新时间:2023-10-16

我正在尝试获取表达式的第 11 个根,并且返回了 -inf 个。

std::cout << pow(j,(1.0/11.0)) << std::endl;

其中j只是一些log表达。我已经检查了该数字以确保它是有效的,而且确实如此。我认为这是权力表达式的运行方式。有没有更好的方法可以做到这一点?谢谢。

是的,我已经把cmath纳入了我的工作。

如果你想不出

pow 返回 -inf 的正当理由,如果你的输入稍微理智。但是,如果您传入负数,可能值得尝试的是:

if(j==0) return 0;
if(j<0) return -pow(-j, 1.0/11.0);
return pow(j,1.0/11.0);
  1. 尝试查找 FPU 错误

    • 最常见的是在某些函数中忘记返回浮点/双精度
    • 这会导致 FPU 堆栈出现问题,这真的很小。
  2. 您也可以尝试在 pow 之前添加它

    asm { fninit; };
    
    • 这将重置 FPU,因此如果您在堆栈上遇到问题,它会有所帮助
    • 但当然不要在某些 FPU 计算过程中这样做
    • 它会破坏它的结果
    • 如果您不在x87平台上,那么这将无济于事
  3. 崩盘前J的价值将是一个与我们分享的良好开端。

  4. 尝试将 Pow 的结果存储到某个浮点/双精度变量中

    • cout 该变量不是临时堆内存位置
    • 如果它打印 -inf 也查看该变量内部,如果它也是 -INF
    • (可能是库特没有pow的问题...
  5. 最小化代码(逐部分关闭所有内容)

    • 看看问题是否突然不存在
    • 隐藏的内存泄漏和代码覆盖是邪恶的...

让我们知道您发现了什么。