2017-04-19 10 views
0

5! = 5 * 4 * 3 * 2 * 1.Fakultät von nicht ganzzahligen Wert in Java

Ich habe kein Problem damit. Aber mir ist bei meinem Programm aufgefallen, dass wenn ich 3,5 eintippe! es würde eine definierte Anzahl zurückgeben.

Wie berechnen Sie sie?

ich so etwas in meinem Programm haben

public class fact { 
    public static void main(String args[]) { 
    double factorial=1; 
    System.out.println("Type a number"); 
    double number= sc.nextDouble(); /*I am using scanner*/ 
    while (number !=0){ 
     factorial = factorial * number; 
     number--; 
    } 
    System.out.println(factorial); 
    } 
} 
+0

Ich verstehe Ihr Problem nicht ganz? Könnten Sie ein bisschen mehr ausarbeiten? – Koekje

+0

verweisen Sie diesen Link https://math.stackexchange.com/questions/454053/how-do-we-calculate-factorials-for-numbers-with-decimal-places – tabby

+0

Die faktorielle Funktion ist nur für Integer definiert. Warum möchtest du 3.5 als Eingabe akzeptieren? – jsheeran

Antwort

2

Sache ist: faktorielles ist ziemlich einfach für ganze, positive Zahlen.

Das Konzept kann auch für Gleitkommazahlen angewendet werden, aber die Mathematik dahinter könnte advanced betrachtet werden.

Also: Schritt zurück; und verstehen Sie die Mathe hinter dem Konzept; vor der Umsetzung des Konzepts!

Mit anderen Worten; Sie müssen entscheiden, ob Sie beabsichtigen, Ihr Programm zu ändern, um mit int Zahlen zu arbeiten (validiert zu> 0); oder wenn Sie Gleitkommazahlen zulassen möchten. Wenn das später dein Ziel ist; dann wird Ihre einfache Implementierung nicht mehr tun.

Darüber hinaus: Sie wollen das Konzept von Gleitkommazahlen in erster Linie studieren. Es ist ein Irrglaube, davon ausgehen, dass eine Schleife wie

double number = ... 
while (number !=0) { 
    .. 
    number--; 
} 

würde immer aufhören, wenn/lang Gleitkommazahlen statt int verwenden! Im Gegenteil ...

5

Faktorial in seiner normalen Definition ist nur für positive ganze Zahlen definiert. Wenn Sie faktorielle Werte für reelle Zahlen berechnen wollen, sehen Sie sich Gammafunktionen an.

https://en.wikipedia.org/wiki/Gamma_function

+1

das ist ziemlich die richtige Antwort! Gamma-Funktion erlaubt es, die Fakultät eines doppelten zu berechnen ... –

0

Sie den definierten Wert immer noch für 3,5 !, weil Ihr Code es wie folgt berechnen wird:

1*3.5*2.5*1.5*0.5 

Aber eigentlich ist es falsch Wert für 3,5 !. Der korrekte Wert ist: 11.6317283966. Ihre Methode ist nur für ganzzahlige Eingaben gültig. Sehen Sie dies für weitere Informationen über Dezimalstellen: this link

+0

Eigentlich wird der Code in der OP dort nicht aufhören, weil es nach "number! = 0", die immer noch unter Null ist. – Hulk

Verwandte Themen