Попытка преобразовать уравнение Excel в C # - PullRequest
2 голосов
/ 08 марта 2019

У меня есть это уравнение Excel, и я изо всех сил пытаюсь преобразовать его в c #.

Части "к власти" и "log" сбивают меня с толку.

Уравнение Excel выглядит следующим образом:

LOG((10^(PreSkillRating/400)/((-ChangeInRating/KFactor)+1)-10^(PreSkillRating/400)))*400/LOG(10)

Пока у меня есть это:

Math.Log((Math.Pow(PreSkillRating / 400, 10)) / (((ChangeInRating * -1) / KFactor) + 1) - Math.Pow((PreSkillRating / 400), 10)) * 400 / Math.Log(10)

Я также знаю, что мне придется проверять на 0 при делении, чтобы остановить Попыткуделить на ноль ошибок.

Например, когда я использую следующие значения для каждой из переменных, я получаю 1879.588002 в качестве ответа в Excel, но бесконечность в C #.

PreSkillRating = 1600
ChangeInRating = 50
KFactor = 60

Что яделать неправильно?

Ответы [ 2 ]

4 голосов
/ 08 марта 2019

Основываясь на предыдущих комментариях и моем первом ответе, давайте подведем итоги:

  • typecast для двойного деления
  • неправильный порядок аргументов для Pow
  • неправильный метод Math.Log (х).Вы можете использовать Math.Log (x, 10) или Math.Log10 (x)

Попробуйте следующую реализацию:

Math.Log10((Math.Pow(10, (double)PreSkillRating / 400)) / (((ChangeInRating * -1.0) / KFactor) + 1) - Math.Pow(10, (double)PreSkillRating / 400)) * 400 / Math.Log10(10)
1 голос
/ 08 марта 2019

Ваши переменные являются значениями int?Затем вы должны добавить Typecast.См. Деление в C # для получения точного значения

В противном случае деления выполняются как целочисленные деления, что вызывает операцию округления для каждого шага отдельно.

...