Je rencontre des problèmes de vitesse avec mon programme C# et j'ai constaté que ce calcul de pourcentage provoquait un ralentissement. Le calcul est simplement n/d * 100. Le numérateur et le dénominateur peuvent être n'importe quel nombre entier. Le numérateur ne peut jamais être supérieur au dénominateur et n'est jamais négatif. Par conséquent, le résultat est toujours de 0-100. À l'heure actuelle, cela se fait simplement en utilisant les mathématiques à virgule flottante et est un peu lent, car il est calculé des dizaines de millions de fois. Je n'ai vraiment besoin de rien de plus précis que le 0,1 pour cent le plus proche. Et, j'utilise simplement cette valeur calculée pour voir si elle est plus grande qu'une valeur constante fixe. Je pense que tout devrait être gardé comme un entier, donc la gamme avec une précision de 0,1 serait 0-1000. Y at-il un moyen de calculer ce pourcentage sans calcul à virgule flottante?Division à la première décimale près sans calcul à virgule flottante?
Voici la boucle que j'utilise avec le calcul:
for (int i = 0; i < simulationList.Count; i++)
{
for (int j = i + 1; j < simulationList.Count; j++)
{
int matches = GetMatchCount(simulationList[i], simulationList[j]);
if ((float)matches/(float)simulationList[j].Catchments.Count > thresPercent)
{
simulationList[j].IsOverThreshold = true;
}
}
}
Je suppose que c'est une boucle assez clairsemée/serrée où cela pourrait causer un tel goulot d'étranglement. Pouvons-nous le voir? – spender
Je suppose que si c'est vraiment ce qui ralentit votre programme, les effets de cache joueront probablement un aussi grand rôle que la différence entre les maths entiers et flottants. En outre boxe/unboxing ou toute autre chose qui pourrait causer l'allocation je m'attendrais à avoir un effet plus grand que les opérations de maths. – Weeble
Je viens d'ajouter la boucle que j'utilise au message. –