Java, Primzahl berechnen.



  • Ich möchte nur wissen, warum man Math.sqrt( potentialPrime ) aus dem Schleifenkopf nimmt. Oder war das ironisch gemeint?



  • man nimmt alles aus dem schleifen kopf was nur einmal berechnet werden muß. vor allem sowas wie ein Math.sqrt(), du mußt nicht bei jedem schleifen durchlauf die wurzel ziehen, es reicht wenn du das einmal machst das ergebnis speicherst und dann bei jedem schleifen durchlauf das in einer variablen gespeicherte ergebnis für den vergleich hernimmst



  • Ich habe es auf beiden Arten getestet. Es hat an der Rechenzeit überhaupt nichts geändert. Im Gegenteil... wenn ich das Math.sqrt(...) aus dem Schleifenkopf genommen habe gings sogar ein ganz kleines bisschen länger. Man kann aber sagen, dass es keinen Unterschied macht.

    Die Compiler sind gut genug das selber zu regeln, das macht keinen Unterschied. Kannst es ja mal testen.



  • ja wenn das so ist dann weiter so...



  • mal eben die ersten 10000 primzahlen ausgeben =>

    import java.math.BigInteger;
    
    public class Prim
    {
      public static void main(String[] args)
      {
        BigInteger prim = BigInteger.ONE;
        for (int i = 0; i < 10000; ++i)
        {
          prim = prim.nextProbablePrime();
          System.out.println(prim);
        }
      }
    }
    

    http://java.sun.com/javase/6/docs/api/java/math/BigInteger.html#nextProbablePrime()



  • --



  • heißt die BigInteger klasse BigInteger weil man sie erst verwenden sollte, wenn das was man ausrechnen will nicht mehr in ein register passt 😕

    lg javaNoob



  • Also wenn long zu kurz ist, dann nimmt man BigInteger oder BigDecimal. Die speichern die Zahlen speziell, sodass man meines Wissens nach mit beliebig grossen Zahlen rechnen kann.
    Man sollte die Klasse aber nur verwenden wenn man sie wirklich braucht. Die arithmetischen Operationen, die für die beiden Klassen definiert sind, brauchen sicher länger als bei Primitivtypen.



  • javaNoob schrieb:

    icarus2 schrieb:

    PS:
    Auch in Java schreibt man <= statt < x + 0.5... das +0.5 sieht merkwürdig aus.

    in java nimmt man doch auch sicher Math.sqrt( potentialPrime ) aus dem schleifen kopf oder 😉

    Ne, der Java Compiler kann das selber rausoptimieren, im gegensatz zu nem C++ Compiler.



  • ich finde das sollte man aus stil gründen schon raus nehmen, allein aus dem grund das man weiß, dass derjenige der das programm geschrieben hat sich nicht voll auf den compiler als optimierer verlässt und weiß was er tut...

    lg javaNoob



  • JavaFördertSchlechtenStil schrieb:

    ich finde das sollte man aus stil gründen schon raus nehmen, allein aus dem grund das man weiß, dass derjenige der das programm geschrieben hat sich nicht voll auf den compiler als optimierer verlässt und weiß was er tut...

    Mann könnte aber auch auf Unwissen schliessen. Man könnte dann annehmen, dass der Programmiere nicht weiss, dass der Compiler das wegoptimiert. Auserdem ist dann eine zusätzliche Variable in der Methode drin... ist auch nicht unbedingt von Vorteil.
    Naja, ist wohl Geschmackssache.

    Ausserdem die Optimization Rules:
    1. Don't do it
    2. For experts only: Don't do it yet

    😉


Anmelden zum Antworten