0
votes

Le flotteur doit-il lancer la meilleure solution pour ne recevoir qu'un numéro entier?

Je me fiche de la précision. Je veux simplement le code le plus optimisé dans cet exemple. L'exemple est:

  • Je compte un numéro d'échelle en divisant un type INT par un type de flotteur et en le faisant, je reçois un numéro de flotteur. Mais en fait, je veux seulement la partie entière, donc je le jette au type INT.
  • Mais ensuite dans un calcul ultérieur, j'ai besoin que le nombre soit float. Encore une fois, j'ai besoin de le jeter.

    La question est la suivante: est-ce que la meilleure façon de le faire? Y a-t-il une méthode qui permettrait de couper cette variable de «flotteur» spécifique sans casser et en faire un nouveau?

    Je l'ai marquée spécifique à la langue parce que je suis curieux si d'autres langues alors c # auraient également une sorte de méthode. Une autre partie de la question est que je ne sais pas vraiment ce que le casting fait ici et que je n'ai pas encore trouvé une bonne explication.


5 commentaires

Avez-vous besoin de la valeur comme type entier ou avez-vous juste besoin de la valeur intégrale? Math.floor () et math.ceil () arrondirait le nombre aux entiers, mais le temps résultant serait toujours flottant / double


Après analyse comparative CAST et MATH.FLOOR Retour au flotteur, ils sont fondamentalement si proches en termes de performance qu'ils sont indiscernables, choisissez votre favori.


Donc, je pense que je vais rester avec jetée alors. ty pour l'analyse comparative


@ Matthewstrumiłło J'ai eu des problèmes avec mes premiers points de repère, mais j'ai mis à jour les résultats. De toute façon bonne chance


"En divisant un type INT par un type de flotteur" -> Les valeurs sont-elles jamais négatives?


3 Réponses :


2
votes

c # fournit Math.Round pour arrondi à un entier le plus proche et Math.trunate pour prendre la partie entière (rond vers zéro).

Je m'en fiche de la précision.

Si vous ne vous souciez pas de la précision, utilisez zéro au lieu du nombre. Cela fournit un résultat extrêmement rapide sans précision.


0 commentaires

0
votes

Vous pouvez utiliser double d = math.floor (A / B); , mais il retournera double . .


0 commentaires

1
votes

Certaines repères xxx pré>

tests fort> p>

note strong> Ce n'est pas le test le plus bien pensé au monde, mais cela donnera au moins une comparaison de base em> SUB> P>

[SimpleJob(RuntimeMoniker.Net472, baseline: true)]
[SimpleJob(RuntimeMoniker.NetCoreApp31)]
public class Test
{

   private float[] _input;
   private float[] _result;

   public Test()
   {
      var rand = new Random(24);
      _input = Enumerable.Range(0, 10000000).Select(x => (float)rand.NextDouble()).ToArray();
      _result = new float[10000000];

   }

   [Benchmark]
   public void Cast()
   {
      for (int i = 0; i < _input.Length; i++)
         _result[i] = (float)_input[i];
   }

   [Benchmark]
   public void Floor()
   {
      for (int i = 0; i < _input.Length; i++)
         _result[i] = (float)Math.Floor(_input[i]);
   }

   [Benchmark]
   public void Truncate()
   {
      for (int i = 0; i < _input.Length; i++)
         _result[i] = (float)Math.Truncate(_input[i]);
   }
}


0 commentaires