2010-11-14 4 views
2

Je souhaite utiliser des nombres à virgule flottante dans mon programme J2ME (MIDP 2.0).
Je n'ai pas besoin de haute précision, donc j'envisage de choisir le type float.Type de données à virgule flottante pour des performances optimales dans J2ME

Cependant, il me semble que j'ai lu un article Java qui dit que double est mieux supporté par les processeurs, donc c'est plus rapide. Je fais beaucoup d'opérations avec de tels nombres, ainsi la performance est importante pour moi.

La question est, laquelle de ces types de données fonctionne plus rapidement dans J2ME?

+1

Comme c'est la règle pour toutes les questions de performance: Mesurez-le. Par exemple, vous pouvez écrire votre programme avec float, mesurer ses performances (sur la plate-forme cible, évidemment), faire une recherche et remplacer pour doubler, mesurer à nouveau la performance, et comparer. – meriton

+1

Eh bien, c'est J2ME, tout peut arriver ... Dans l'émulateur 'double' peut être mieux, mais sur les téléphones mobiles réels' float' peut gagner. –

+0

C'est pourquoi vous devez mesurer sur le périphérique cible :-) – meriton

Répondre

1

La différence de performance entre float et double n'est pas significative.

Si vous faites ces opérations très souvent que float est préférable, il consomme moins d'espace.

Mise à jour:

public long sumDouble(){ 

     double[] arr = new double[1000]; 
     for(int i = 0 ;i < 1000;i++){ 
      arr[i]=new Random().nextFloat(); 
     } 
     float sum = 0.0f; 
     long start = System.currentTimeMillis(); 
     for(int i = 0 ;i < 1000;i++){ 
      sum+=arr[i]; 
     } 
     System.out.println(""+sum); 
     long end = System.currentTimeMillis(); 
     return end - start; 
    } 
    public long sumFloat(){ 

     double[] arr = new double[1000]; 
     for(int i = 0 ;i < 1000;i++){ 
      arr[i]=new Random().nextDouble(); 
     } 
     double sum = 0.0f; 
     long start = System.currentTimeMillis(); 
     for(int i = 0 ;i < 1000;i++){ 
      sum+=arr[i]; 
     } 
     System.out.println(""+sum); 
     long end = System.currentTimeMillis(); 
     return end - start; 
    } 

Essayez d'exécuter ces méthodes dans votre appareil réel pour mesurer la différence de performance Son peu significative.

+0

Avez-vous une preuve de cela? –

+0

@BlaXpirit a mis à jour la réponse –

Questions connexes