取根高于2

时间:2013-10-29 07:04:06

标签: c++ square-root cmath

我正在尝试使用表达式的第11个根,我将返回-inf

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

其中j只是一些log表达式。我检查过这个号码以确保它有效,而且确实有效。我在想,这就是动力表达式的运行方式。有一个更好的方法吗?感谢。

是的,我已将cmath纳入我的工作中。

2 个答案:

答案 0 :(得分:1)

如果你的输入略微合理,我想不出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 :(得分:1)

  1. 尝试查找FPU错误

    • 最常见的是在某些功能中忘记了float / double的返回
    • 导致FPU堆栈上的问题非常小。
  2. 你也可以在pow

    之前尝试添加它
    asm { fninit; };
    
    • 这会重置FPU,所以如果你在堆栈上遇到问题就会有帮助
    • 但当然不要在某些FPU计算中间执行此操作
    • 会破坏其结果
    • 如果您不在x87平台上,那么这将无济于事
  3. 崩溃之前的j值将是与我们分享的良好开端。

  4. 尝试将pow的结果存储到某个浮点/双变量

    • cout该变量不是临时堆内存位置
    • 如果它打印 - 如果它也是-inf
    • ,也会查看该变量
    • (cout可能出现问题但不是......)
  5. 最小化您的代码(逐个部分关闭所有代码)

    • 并查看问题是否突然出现
    • 隐藏的内存泄漏和代码覆盖是邪恶的......
  6. 告诉我们你找到了什么。