Vitesse d'exécution des fonctions ceil(),round(),floor() - page 7

 
Andrey Kisselyov:

Prenons un exemple :
si vous changez même le bitness de la machine, vous passez à 64 bits et la précision de la machine a augmenté, votre formule cessera de fonctionner car la précision de la machine sera beaucoup plus élevée que ce que vous avez défini dans votre erreur.

Avec respect.

P.S. il peut y avoir d'autres possibilités où votre formule échouera sur une plage de nombres. erreur d'ajustement constant lors du passage à une autre machine, ou de changements dans le compilateur, dont vous n'êtes pas informé, ou lorsque vous changez la représentation des nombres dans la machine, ou de la découpe d'une partie fractionnaire du nombre lors de la compilation d'une nouvelle version du terminal ... Vous ne savez pas ce qui va changer, je ne pense pas que ce soit une bonne idée de faire un IF ou de souffrir pour deviner ce qui va se passer en écrivant l'erreur encore et encore....

Je pense qu'il y a beaucoup de choses à penser.


Je ne suis pas d'accord. La formule(y=(int)(x+0.9999999999999997) ;) ne cessera pas de fonctionner lorsque la précision sera augmentée, elle fonctionnera de la même manière. Comme précédemment, l'erreur se produira dans l'intervalle de la partie fractionnaire du nombre compris entre DBL_EPSILON (la valeur actuelle : 0.000000000000022204460492503131) et 0.000000000003. Même si DBL_EPSILON tombe à zéro (ce qui est bien sûr impossible), l'intervalle augmentera de la taille de la DBL_EPSILON actuelle, c'est-à-dire de 2.2204460492503131e-016. Je crois que l'on peut même ignorer une telle plage d'erreurs.

Et qu'est-ce que le terme "précision de la machine" de toute façon. Il existe des précisions standardisées comme le double et d'autres types. Votre raisonnement ne compte pas. Je ne dirai rien sur P.S.)) J'ai peur d'offenser.

Avec respect.

 
Nikolai Semko:

Je ne suis pas d'accord. La formule(y=(int)(x+0.9999999999999997) ;) ne cessera pas de fonctionner lorsque la précision sera augmentée, elle fonctionnera de la même manière. Comme précédemment, l'erreur se produira dans l'intervalle de la partie fractionnaire du nombre compris entre DBL_EPSILON (la valeur actuelle : 0.000000000000022204460492503131) et 0.000000000003. Même si DBL_EPSILON tombe à zéro (ce qui est bien sûr impossible), l'intervalle augmentera de la taille de la DBL_EPSILON actuelle, c'est-à-dire de 2.2204460492503131e-016. Je crois que l'on peut même ignorer une telle plage d'erreurs.

Et qu'est-ce que le terme "précision de la machine" de toute façon. Il existe des précisions standardisées comme le double et d'autres types. Votre raisonnement ne compte pas. Je ne dirai rien sur P.S.)) J'ai peur d'offenser.

Respectueusement.

Lorsqu'il est appliqué aux prix sur le marché, vous pouvez généralement laisser la précision à 5-6 chiffres, et puisque vous travaillez en mathématiques et ne savez pas qui et quoi aura besoin de votre nouveau calcul rapide, vous devriez appliquer le "principe du comportement insensé" selon lequel peu importe qui et quand peut mettre cette valeur où la fonction sera fausse dans les calculs.

Respectez vous, n'importe qui peut vous salir le visage, est-ce que cela vaut la peine de donner à un adversaire une raison de le faire en étant grossier ? Nous sommes tous évolués dans quelque chose, alors que d'autres choses ne sont tout simplement pas intéressantes ou pas importantes pour nous.
Puisque nous parlons d'assembleur et de ce que vous imaginez qu'il arrive au code après le compilateur, je vais vous dire quelques phrases que vous pouvez comprendre.

Comme un processeur dispose d'un nombre limité de bits dans chaque registre, l'addition et la soustraction ou toute autre opération dans ces registres présentent des aspects délicats en ce qui concerne les drapeaux.
En tant que personne ayant travaillé en assembleur, vous devriez comprendre de quoi nous parlons.
dites-moi donc à commande ADD sur différents modèles de processeur s'il y aura un débordement, si vous écrivez du code en langage assembleur en utilisant le même nombre sur différents modèles et en général il ne peut tenir dans aucun registre et sera tronqué, de 8 bits dernière génération à 64 bits et plus génération actuelle et comment cela peut changer dans le futur (le développement technologique est si fugace, il s'est passé juste 40 ans, et nous avons déjà un processeurs multi-core au lieu d'une lampe début des années 80) ?

mon respect.
 
Il vaut mieux ouvrir le profilage et voir où dans votre code l'exécution est lente, et ce n'est évidemment pas les fonctions mathématiques. La plupart sont des boucles, toutes sortes de requêtes et ainsi de suite. Les fonctions mathématiques sont parmi les plus rapides et essayer de couper quelque chose là n'est pas très intelligent pour moi.

Avec respect.
 
Nikolai Semko:

Très bien, messieurs, vous avez fait votre point. Je vais changer la fonction plafond pour vous :

Cette variante est 25-50% plus lente que la variante :y=(int)(x+0.99999999999997) ; mais elle est maximalement correcte, fonctionne pour les entiers négatifs et est 3 fois plus rapide que ceil(x).

Mais moi-même, en tant que roturier et raté, j'utiliserai la variante avec les neuf, parce que je considère que tous vos arguments sont ennuyeux et que pour moi, qui programme en assembleur depuis longtemps, et qui sait donc ce qui arrive au code après la compilation, c'est trop - de mettre des contrôles là où on peut s'en passer.

Passer aux personnalités signifie traditionnellement un manque d'arguments sur le fond. Mais je vous pose quand même une question. Qu'est-ce qui vous a poussé à réduire le temps d'un million d'arrondissements de 8 à 5 ou 2 millisecondes ? Quelle était la charge réelle du processeur si même de tels délais s'avéraient être un goulot d'étranglement ? Je n'ai pas rencontré de tels besoins. Peut-être que c'était quelque chose d'abstrait, d'intérêt académique ?
 
Vladimir:
L'attitude personnelle est traditionnellement synonyme d'absence d'arguments de fond.

Je suis d'accord, ainsi qu'un manque de comportement culturel, dans le but d'humilier l'interlocuteur.

Respectueusement.

 
Andrey Kisselyov:
Concernant le "pas de crédit", je n'ai pas donné une évaluation de vos arguments et n'a pas déprécié vos mérites, comme je le souhaite. respecter vous-même, frotter votre visage dans la saleté peut tout le monde, que ce soit pour donner à votre adversaire une raison de le faire, demandant de la grossièreté dans leurs actions ? nous avons tous développé dans quelque chose, et que nous sommes tout simplement pas intéressés ou sans intérêt pour nous.
Vladimir:
Le choix des personnalités signifie traditionnellement un manque d'arguments sur le fond.
Andrey Kisselyov:

Je suis d'accord, ainsi que l'absence de comportement culturel consistant à essayer d'humilier l'interlocuteur.

Wow ! Je m'excuse certainement si j'ai offensé quelqu'un. Vous avez dû être offensé par ce que j'ai dit :

Nikolai Semko:

Très bien, messieurs d'honneur, c'est réglé. Je change la fonction plafond juste pour toi :

Mais moi-même, en tant que roturier et étudiant en C, j'utiliserai la variante avec les neuf, car je considère que tous vos arguments sont ringards...

NikolaiSemko:

Et qu'est-ce que le terme "précision de la machine" de toute façon. Il existe une précision standardisée comme le double et d'autres types. Votre raisonnement ne compte pas. Je ne parle pas du tout de P.S.))) J'ai peur d'offenser.

Eh bien, tu sais... Je pense que vous avez une imagination fertile. Dans le badinage ordinaire, on voit le "transfert à la personnalité", la "tentative d'humiliation de l'interlocuteur", la "dépréciation des mérites"...

Ou ai-je manqué quelque chose, et quelque part ailleurs j'ai dépassé les limites de la décence ?

Désolé, Andrew, mais je n'ai apparemment pas assez de connaissances et d'expérience pour comprendre ce que tu as écrit dans ce P.S. :

Andrey Kisselyov:
P.S. il peut y avoir d'autres variantes, lorsque votre formule échoue sur une plage de nombres. erreur d'ajustement constante due au passage à une autre machine, ou à des changements dans le compilateur, dont vous n'êtes pas informé, ou à des changements dans la représentation des nombres par la machine, ou à la découpe de lapartie fractionnaire du nombre lors de la compilation dans les nouvelles versions du terminal... Je ne sais pas ce qui peut changer, je ne pense pas que ce soit une bonne idée de faire de la FI ou de souffrir de deviner ce qui va se passer en prescrivant une erreur encore et encore...
Je serais très reconnaissant si quelqu'un pouvait expliquer le sens de ce que j'ai écrit.
Encore une fois, je m'excuse pour mon ton. Je prône toujours le respect mutuel entre collègues et un comportement correct. Le diable est dans mon esprit.
 
Vladimir:
Qu'est-ce qui vous a incité à réduire le temps d'arrondi de 8 à 5 ou 2 millisecondes ? Quelle était la charge réelle sur le processeur si même de tels délais s'avéraient être un goulot d'étranglement ? Je n'ai pas rencontré de tels besoins. Peut-être s'agit-il de quelque chose d'abstrait, d'intérêt académique ?
Andrey Kisselyov:
Il estpréférable d'ouvrir le profilage et de voir où dans votre code est en retard, et ce n'est évidemment pas les fonctions mathématiques. La plupart du temps, ce sont des boucles, diverses requêtes et ainsi de suite. Les fonctions mathématiques sont parmi les plus rapides et essayer de couper quelque chose là n'est pas très intelligent, je pense.
Je ne sais pas pourquoi tu penses que je suis lent. Au contraire, je pense que mes algorithmes sont les plus rapides. Je suis juste un peu un fou de vitesse. Bien sûr, l'utilisation d'une telle alternative de remplacement de la fonction d'arrondi donne un gain très faible, juste des fractions de pour cent. Mais comme le dit le dicton, du monde en général. C'est également le cas, par exemple, dans le domaine de l'aéronautique et de la fusée. Dans la lutte pour réduire le poids sans compromettre la résistance, tout est modifié, même les boulons. C'est peut-être l'une des raisons pour lesquelles, contrairement à la logique, l'avion est aujourd'hui le mode de transport le plus sûr.
 
Nikolai Semko:

Wow ! Je m'excuse certainement si j'ai offensé quelqu'un. Vous avez dû être offensé par ce que j'ai dit :

Eh bien, tu sais... Je pense que vous avez une imagination débordante. Dans un simple badinage amical, on voit des "personnalités", des "tentatives d'humiliation", des "dévalorisations"...

Si vous vous permettez de "ridiculiser" vos amis, vous n'avez pas d'amis, vous avez autour de vous des clowns dont vous vous moquez parfois et dont vous n'appréciez pas l'amitié et l'opinion.

Nikolai Semko:

Ou ai-je manqué quelque chose, et quelque part ailleurs j'ai dépassé les limites de la décence ?

Je ne suis pas votre ami, votre frère ou même une personne proche pour que vous puissiez vous donner une quelconque appréciation, a fortiori PUBLIQUEMENT.

Nikolai Semko:
Désolé, Andriy, je n'ai apparemment pas assez de connaissances et d'expérience pour comprendre ce que vous avez écrit dans ce P.S. : Je serais très reconnaissant si quelqu'un pouvait m'expliquer le sens de ce que vous avez écrit.

Le sens de ce qui est écrit dans P.S., que vous ne pouvez pas comprendre pour une raison quelconque est évident, vous ne savez pas comment la technique que vous utilisez vos formules rapides va se développer, vous ne savez pas comment la plate-forme va se développer, vous ne savez pas ce qui sera ajouté par la suite au compilateur et comment les nombres seront représentés dans l'espace des registres du processeur, vous ne savez rien de tout cela et introduire une constante, en disant qu'elle va tout résoudre positivement et toujours, est, pour ainsi dire, une illusion.

Si vous tenez compte du fait que votre formule sera reprise par d'autres personnes du forum et qu'elles pourraient la transposer en C ou en Pascal ou autre, vous devez également tenir compte de ces points. Les mathématiques n'ont aucune limite, que ce soit en termes de plate-forme ou de langage de programmation.

Nikolai Semko:
Encore une fois, je m'excuse pour mon ton. Je prône toujours le respect mutuel entre collègues et la correction des comportements. J'ai dépassé les bornes.

excuses acceptées. ne refaites pas les mêmes erreurs, sinon vos paroles ne sont que des déchets sans signification.

Respectueusement.

 
Nikolai Semko:
Je ne sais pas ce qui te fait penser que je suis lent. Au contraire, je pense que mes algorithmes sont les plus rapides. Je suis juste un peu un fou de vitesse. Bien sûr, l'utilisation d'une telle alternative de remplacement de la fonction d'arrondi donne un gain très faible, juste des fractions de pour cent. Mais comme le dit le dicton, du monde en général. C'est également le cas, par exemple, dans le domaine de l'aéronautique et de la fusée. Dans la lutte pour réduire le poids sans compromettre la résistance, tout est modifié, même les boulons. C'est peut-être l'une des raisons pour lesquelles les avions sont aujourd'hui le mode de transport le plus sûr, contrairement à la logique.
Je suis en faveur d'une approche raisonnable de la programmation, où l'on peut accélérer pas contre la logique, c'est mieux de le faire, mais toute "maladie" doit être traitée, car elle est une aberration d'un mode de vie sain.

Avec respect.
 
Andrey Kisselyov:

Si vous vous permettez d'"ÉTUDIER" vos amis, vous n'avez pas d'amis, vous avez autour de vous des clowns dont vous vous moquez parfois et dont vous n'appréciez pas l'amitié et l'opinion.

On dirait que Nikolaï avait raison au sujet des nerds.)

Personnellement, je n'y ai pas vu de référence personnelle. Et vous avez beaucoup de lettres dans vos messages, mais tout est hors sujet et vous semblez argumenter juste pour le plaisir d'argumenter.