Преобразование академической математической записи в C-код - PullRequest
0 голосов
/ 15 сентября 2010

Те из вас, кто хоть немного разбирается в математике, скорее всего, будут смеяться, но я не помню, какая часть правил нотации в математике, и мне нужна помощь в преобразовании этого в C-код.Ваша помощь очень ценится:

                                         214
          10,000 {(10,000 × [1+.0599/365]   )} +300
answer = ────────────────────────────────────────────
                                   214
                     .1+(1+(i/365))

Ответы [ 4 ]

12 голосов
/ 15 сентября 2010

Вы ищете программу для ее перевода или разовое преобразование?Если это просто однократное преобразование, это не так интересно.

Если я правильно прочитал ваш синтаксис:

double ans = 10000 * (10000 * pow(1.0 + 0.0599 / 365, 214) + 300;
ans /= (0.1 + pow(1.0 + (i / 365.0), 214));

Я скажу, что у вас могут быть проблемы споднимая вещи до такой степени показателя и деления.Скорее всего, вам придется переводить в журналы и делать математику в пространстве журнала, а затем конвертировать.

Как это может выглядеть:

double lognumerator = log(10000) + log(10000) + 214 * log(1 + 0.0599 / 365);
double logdenominator = log(0.1 + exp(214 * log(1.0 + (i / 365.0))));
double ans = exp(lognumerator - logdenominator) + exp(log(300) - logdenominator);

Использование журнала может помешать вамот попадания в недопущение, которое вы можете очень хорошо ударить с помощью этих типов вычислений.

2 голосов
/ 15 сентября 2010

Простой - просто пара распространенных ошибок, за которыми нужно следить.

Поставьте .0 после константных чисел (особенно в знаменателе), чтобы «с» рассматривал вычисление как математику с плавающей точкой, а не как целое число.
В 'C' 100/1000 - это 0, 100 / 1000.0 - это 0,1

Используйте скобки свободно - не доверяйте запоминанию правил приоритета.

Вам нужно использовать * везде дляумножение 3 (1 + 2) не является умножением.

Функция pow (x, y) используется для x ^ y.Современные компиляторы C ++ имеют оптимизированные версии, где y является целым числом, поэтому x ^ 2 намного быстрее, чем x ^ 2.0

0 голосов
/ 15 сентября 2010
(10000.0 ( ( 10000.0 * pow(1 + 0.0599/365.0, 214.0))) + 300.0 ) / (1 + pow(1 + i/365.0, 214.0))

Я думаю, что понял это правильно. :)

0 голосов
/ 15 сентября 2010

Вы ищете функцию pow(x,y) для расчета мощности?

...