【问题标题】:Having trouble writing an equation with complex exponents in C#在 C# 中编写具有复杂指数的方程时遇到问题
【发布时间】:2021-05-10 20:03:35
【问题描述】:

我进行了一些研究,但似乎找不到我需要的东西。这可能很容易解决,但我很难过。我正在尝试用 c# 编写方程式,它为我返回一个 NaN 值,我不知道为什么。 我在下面发布了我的代码以及原始方程式的图片。任何帮助将不胜感激,我不相信我输入的方程式正确。

static void Main(string[] args)
    {
        int playerLevel;
        double experience = 1;
        WriteLine("Please Enter Your Current Level: ");
        playerLevel = Convert.ToInt32(ReadLine());
        try
        {
            experience = 1 / 8 * (Math.Pow(playerLevel, 2) - playerLevel + 600 * ((Math.Pow(2, Convert.ToDouble(playerLevel/7)) - Math.Pow(2, Convert.ToDouble(1/7))) / (Math.Pow(2, Convert.ToDouble(1/7)) - 1)));
            WriteLine("Your current Experience is: " + experience);
        }
        catch (Exception err)
        {
            WriteLine(err.Message);
            throw;
        }
        ReadKey();
    }

Original Equation

【问题讨论】:

  • 使用1.0/7.0 等而不是先进行整数除法然后尝试将其转换为双精度数。 1/7 为零。始终将双打写成双打而不转换。
  • 你调试过你的代码,哪一行报错了?
  • 我建议您将单线方程拆分为多个较小的计算,并使用一些好的命名变量。这也将使调试更容易。
  • 你应该使用中间变量分解这一可怕的一大行,以便能够看到事物以及调试......

标签: c# math visual-studio-2019 equation


【解决方案1】:

这段代码是罪魁祸首: / (Math.Pow(2, Convert.ToDouble(1 / 7)) - 1)

  • 1/7 为 0。
  • 2^0 是 1
  • 1 - 1 为 0
  • 除以零,得到 NaN。

考虑只写1.0/7.0 而不是Convert.ToDouble(1 / 7)

可能让您感到困惑的是1/7 是零,因为它是整数除法。 1 是一个整数,7 是一个整数,所以/ 将使用整数除法,得到0。

【讨论】:

    【解决方案2】:

    在所有数字后添加“.0”或“d”以表明它们不是整数。 例如,写“1.0”而不是“1”。

    【讨论】:

      猜你喜欢
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多