繁体   English   中英

取根高于2

[英]Taking a root higher than 2

我正试图取一个表达式的第11个根,我得到了-inf的返回。

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

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

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

如果您的投入略微合理,我无法想出战俘返回-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错误

    • 最常见的是在某些函数中忘记了float / double的返回
    • 这导致FPU堆栈上的问题非常小。
  2. 也可以尝试在粉末之前加上这个

     asm { fninit; }; 
    • 这会重置FPU,所以如果你在堆栈上有问题,它会有所帮助
    • 但当然不要在某些FPU计算中间这样做
    • 它会毁掉它的结果
    • 如果你不在x87平台上,这将无济于事
  3. 崩溃前j的值将是与我们分享的良好开端。

  4. 尝试将pow的结果存储到某个float / double变量中

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM