Ich arbeite an einer Subfunktion in JavaScript implementieren, um die Gesamtzahl der möglichen Störungen für n
Elemente zu berechnen, und ich habe etwas vermasselt. Meine Berechnung scheint immer eine hohe oder eine niedrige zu sein. Was habe ich vermasselt? Ist es ein Rundungsfehler?Warum ist meine Subfactorial-Funktion um eins deaktiviert?
function subfactorial (x) {
x = parseInt(x);
var i;
var sub = 0;
var sum = 0;
sum += factorial(x);
for (i = 0; i < x; i++) {
sub += (Math.pow(-1, i)/factorial(i));
}
return sum * sub;
}
function factorial (y) {
var negative = y < 0;
y = parseInt(Math.abs(y)); // Ints only
var acc = 1;
for (y; y > 0; y--) {
acc *= y;
}
return negative ? -acc : acc;
}
function getSubfactorial() {
var val = document.getElementById('subfac').value;
document.getElementById('result').innerHTML = subfactorial(val);
}
<label for="subfac">Subfactorial input:</label>
<input type="number" id="subfac">
<button type="button" onClick="getSubfactorial()">Get Subfactorial</button>
<div id="result"></div>
Zum Beispiel subfactorial(3)
3 kehrt, wenn die Antwort sollte 2. subfactorial(4)
8 zurückkehrt, wenn die Antwort sollte 9. subfactorial(5)
Returns 45 (mit einem Gleitkomma- Rundungsfehler), wenn die Antwort sollte 44 sein und so weiter und so fort. Es scheint zu alternieren, dass es zu niedrig und zu hoch zwischen geraden und ungeraden Zahlen ist.
Die Formel Ich verwende kommt dies sein:
In TeX:
!x = x! \sum_{k=0}^{x}\frac {(-1)^k}{k!}
Rendered TeX:
Ich kann nicht glauben, dass ich das verpasst habe. Ich hätte im Mathematikunterricht mehr Aufmerksamkeit bekommen sollen. Ich habe völlig vergessen, dass die obere Grenze der Summe inklusive ist. Vielen Dank! –
@BrandonAnzaldi Du bist cool, weil du deinen Mathematikunterricht vermisst hast. Ich war nicht in einem. Und ich weiß nicht einmal, wie ich das Ding lesen soll. :( – choz
@choz Haha. So beängstigend es aussieht, es rollt grundsätzlich zu einem relativ einfachen Code. Ich habe Mathe seit High School nicht berührt.: P –