Что не так в этом математическом уравнении в C#? - PullRequest
1 голос
/ 31 марта 2020

У меня есть математическое уравнение, и я хочу использовать его в своей программе, но я получил ошибку. Результатом этого уравнения является не число .. математическое уравнение i:

примечание: n - это число в текстовом поле

((298/2)^2*ACOS(((298/2)-n)/(298/2))-((298/2)-n)*((2*(298/2)*n-n^2))^(0.5))*1213/1000

в коде кнопки

double a = Math.Pow((298.00 / 2), 2);
        double b = (Math.Acos(((298.00 / 2) - Convert.ToDouble(textBox1.Text)) / (298.00 / 2)));
         double c = ((298.00 / 2) - Convert.ToDouble(textBox1.Text));
        double d = (2 * (298.00 / 2) * Convert.ToDouble(textBox1.Text));
        double f = Math.Pow(Convert.ToDouble(textBox1.Text), 2);
        double r = ((a * b) - (c * d) )- f;
        double result = Math.Pow(r, (0.5));
        double h = result * 1213.00 / 1000;
        textBox1.Text = Convert.ToString(h );
    }

Если кто-нибудь знает, что здесь не так, скажите, пожалуйста. Ошибка в переменной r, потому что результат от r меньше 0!

1 Ответ

0 голосов
/ 31 марта 2020

Позволяет переписать данное математическое выражение более удобным способом:

( (298/2)^2 * ACOS(((298/2)-n)/(298/2)) - ((298/2)-n) * ( (2*(298/2)*n - n^2 ) ) ^ (0.5) ) * 1213/1000
  ---------   -------------------------   -----------     ------------   ---
      a                  b                     c               d          f
                                                        --------------------------------
                                                                 r = (d - f) ^ 0.5
------------------------------------------------------------------------------------------------------
                                    (a * b - c * r) * 1213/1000

Теперь легче увидеть, что у вас есть ошибка в формуле:

double r = ((a * b) - (c * d) )- f;

r должно быть рассчитывается по следующей формуле:

double r = Math.Sqrt(d - f); // It is better to use Math.Sqrt(x) instead of Math.Pow(x, 0.5).

Теперь, зная, где находится ошибка, мы можем ее исправить:

double n = Convert.ToDouble(textBox1.Text);

double a = Math.Pow(298.00 / 2, 2);
double b = Math.Acos( (298.00 / 2 - n) / (298.00 / 2) );
double c = 298.00 / 2 - n;
double d = 2 * 298.00 / 2 * n;
double f = Math.Pow(n, 2);
double r = Math.Sqrt(d - f);
double result = a * b - c * r;
double h = result * 1213.00 / 1000;

textBox1.Text = Convert.ToString(h);

Но для значений n > 298 вы все равно получите r = NaN потому что для таких значений n выражение d - f является отрицательным.

...