#c# #math #formula
#c# #математика #формула
Вопрос:
Я пытаюсь скопировать следующую формулу из Excel в приложение C #, и результат отличается.
Ответ, где x=5
должен быть y=55.249875
, который я только что выполнил с помощью калькулятора Windows и соответствует ответу Excel.. но не тогда, когда я пробую это на C #.
Для E
я использую Math.Exp
и для x^y
меня используют Math.Pow()
.
Есть идеи?
Формула:
y = -1E-06x^6 0.0001x^5 - 0.0025x^4 0.0179x^3 0.0924x^2 - 0.6204x 55.07
Комментарии:
1. Это не позволило бы мне добавить формулу в мой вопрос, так что вот она: y = -1E-06x ^ 6 0.0001x ^ 5 — 0.0025x ^ 4 0.0179 x ^ 3 0.0924 x ^ 2 — 0.6204 x 55.07
2. Покажите нам код, который вы используете.
3. Какое значение вы получаете с помощью C #?
4. Какие типы данных вы используете?
Ответ №1:
Это было бы:
static double Compute(double x)
{
return -1E-06 * Math.Pow(x, 6)
0.0001 * Math.Pow(x, 5)
- 0.0025 * Math.Pow(x, 4)
0.0179 * Math.Pow(x, 3)
0.0924 * Math.Pow(x, 2)
- 0.6204 * x 55.07;
}
Вот полностью работающая тестовая программа для демонстрации:
using System;
class Test
{
static double Compute(double x)
{
return -1E-06 * Math.Pow(x, 6)
0.0001 * Math.Pow(x, 5)
- 0.0025 * Math.Pow(x, 4)
0.0179 * Math.Pow(x, 3)
0.0924 * Math.Pow(x, 2)
- 0.6204 * x 55.07;
}
static void Main()
{
Console.WriteLine("Value for x {0} == {1}", 5, Compute(5));
Console.ReadKey();
}
}
Я думаю, путаница заключалась в том, что вы предполагали, что требуется -1E-06 Math.Exp
, но это не так. Это всего лишь простое число в научной нотации.
Комментарии:
1. Также благодарю вас, мистер Копси … 🙂
Ответ №2:
E
это научная нотация и, следовательно, база 10. Math.Exp
является естественным возведением в степень, т.е. e^x
.
Вместо записи -Math.Exp(-06)*Math.Pos(x, 6)
вы просто пишете -1E-06*Math.Pow(x, 6)
.
Ответ №3:
Для E я использую Math.Exp
Вот в чем ваша проблема. -1E-06
числовой литерал -1 * 10 ^ -6 (т.е. -0.000001), это не -1 * e ^ -6.
Ответ №4:
Попробуйте это:
Func<double, double> calc = x => -1E-06d*Math.Pow(x, 6)
0.0001d*Math.Pow(x, 5)
- 0.0025d*Math.Pow(x, 4)
0.0179d*Math.Pow(x, 3)
0.0924d*Math.Pow(x, 2)
- 0.6204d*x
55.07;
var y = calc(5);
Console.Out.WriteLine("y = {0}", y);
Ответ №5:
Как в Excel, так и в C # я получаю 61,4538750 для X = 5.
Вот код C #:
class Program
{
static void Main(string[] args)
{
// -1E-06x^6 0.0001x^5 - 0.0025x^4 0.0179x^3 0.0924x^2 - 0.6204x 55.07
var done = false;
while(!done)
{
double x;
if (!Prompt("X> ", out x, out done))
{
if (done) break;
}
var sum = Calculate(x);
Console.WriteLine("Result = {0}", sum);
}
#if DEBUG
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
#endif
}
private static double Calculate(double x)
{
Console.WriteLine("Calculating -1E-06x^6 0.0001x^5 - 0.0025x^4 0.0179x^3 0.0924x^2 - 0.6204x 55.07");
var coefficients = new double[] { -1e-6, 1e-4,-2.5e-3, 1.79e-2,9.24e-2,6.204e-1, 5.507e1 };
var powers = new double[] { 6,5,4,3,2,1,0 };
var sum = 0.0;
for(var i=0;i<coefficients.Length;i )
{
var termValue = coefficients[i] * Math.Pow(x, powers[i]);
sum = termValue;
Console.WriteLine("Sum [{0}x^{1}] = {2}", coefficients[i],powers[i],termValue);
}
return sum;
//var result = -1E-6*Math.Pow(x,6) 1E-4*Math.Pow(x,5) - 2.5E-4*Math.Pow(x,4) 1.79E-2*Math.Pow(x,3)
}
static bool Prompt(string prompt, out double value, out bool done)
{
done=false;
var validInput = false;
Console.Write("X> ");
var xString = string.Empty;
if(!(validInput = double.TryParse(xString = Console.ReadLine(),out value)))
{
done = xString.ToLower()=="quit";
}
return validInput;
}