Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function createSalary() {
- var outcome = document.querySelector('.outcome');
- var el = document.querySelector('.salary-guess');
- if (el) {
- outcome.removeChild(el);
- }
- var div = document.createElement('div');
- div.setAttribute('class', 'salary-guess');
- div.innerHTML = "<div class='salary-guess'><input class='irr' type='text' placeholder='IRR %' value='7'></input><div class='calculated-profit salary'></div><div class='steps'></div></div>";
- outcome.appendChild(div);
- function newtonsMethod(f, df, x0) {
- console.log("x : " + x0);
- console.log("f : " + f(x0));
- console.log("df: " + df(x0));
- return x0 - f(x0) / df(x0);
- }
- function solveNpv(total, years, irr) {
- if (total <= 0 || years <= 0) {
- return 0;
- }
- function computeGrowth(salary){
- var s = 0;
- for (var y = 0; y < years; y++) {
- s = s*(1 + irr/100) + salary;
- }
- return s - total;
- }
- function dComputeGrowth_dSalary(salary) {
- return (computeGrowth(salary*1.01) - computeGrowth(salary)) / (salary * 1.01 - salary);
- }
- var steps = 0;
- var error = 11;
- var guess = 100;
- while (steps < 100 && Math.abs(error) > 10) {
- guess = newtonsMethod(
- computeGrowth,
- dComputeGrowth_dSalary,
- guess
- );
- steps = steps + 1;
- error = computeGrowth(guess);
- console.log(error);
- }
- document.querySelector('.steps').innerText = steps + ' steps to solve';
- document.querySelector('.salary').innerText = '$' + guess.toFixed(0) + ' /year (not adj)';
- }
- document.querySelector('input.exit-value').addEventListener('change', recompute);
- document.querySelector('input.irr').addEventListener('change', recompute);
- function recompute() {
- var years = parseInt(document.querySelector('.calculated.years').innerText);
- console.log('years ' + years);
- var payout = parseInt(document.querySelector('.calculated.profit').innerText.replace(/\$|,/g,''));
- console.log('payout ' + payout);
- var irr = parseInt(document.querySelector('input.irr').value);
- solveNpv(payout, years, irr);
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement