【问题标题】:c++ negative square rootC++ 负平方根
【发布时间】:2012-02-06 20:55:45
【问题描述】:

如果平方根为负,我的目标是打印***。但我想不出办法将默认的nan 文本更改为***

for(int i=x1;i<=x2;i++){
   double y = sqrt(pow(i,2)+3*i-500);
    if(y = ?){
        outFile << "***";
    }

那么,我应该在 if 语句中写什么来使它成为可能?或者也许还有另一种方法来检查 y 是否为 nan 然后打印 *

【问题讨论】:

标签: c++ for-loop sqrt


【解决方案1】:

检查平方根函数的负输入怎么样?

for (int i = x1; i <= x2; ++i)
{
    double x = pow(i, 2) + 3*i - 500;
    if (x < 0)
    {
        outFile << "***";
    }
    else
    {
        outFile << sqrt(x);
    }
}

【讨论】:

    【解决方案2】:

    在 C++ 中测试 NaN 是 tricky。如果 sqrt 的参数是否定的,只需使用 if 语句来避免评估它。

    【讨论】:

      【解决方案3】:

      一个 nan 数不等于任何东西,甚至不等于它自己。
      你可以简单测试一下if( y != y ).

      【讨论】:

      • @RnD:这不是 100% 可靠的,请查看链接副本中 Alf 的答案以获取更多详细信息。
      【解决方案4】:

      如果平方根为负,我的目标是打印 *。但我想不出将默认 nan 文本更改为 *

      的方法

      平方根永远不会是负数。但这可能很复杂。见https://en.wikipedia.org/wiki/Complex_number

      这个想法是将数字集合扩展为所谓的复平面,其中包含一个特殊的数字i,其定义为i² = -1 。这允许我们推广平方根:

      sqrt(a b) = sqrt(a) sqrt(b)

      所以我们可以把 sqrt(-a) 分解成 sqrt(-1) sqrt(a) = i sqrt(a)

      这使我们可以将您的程序更改为

      for(int i=x1;i<=x2;i++){
          double X = pow(i,2)+3*i-500;
          double y = sqrt(abs(x));
          if(X < 0){
              outFile << y << "i";
          } else {
              outFile << y;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多