Velocidad de ejecución de las funciones ceil(),round(),floor() - página 7

 
Andrey Kisselyov:

Pongamos un ejemplo:
si cambias incluso el bitness de la máquina, cambias a 64 bits y la precisión de la máquina ha aumentado, tu fórmula dejará de funcionar ya que la precisión de la máquina será muy superior a la que has establecido en tu error.

Con respeto.

P.D. puede haber otras opciones en las que su fórmula falle en un rango de números. ajustando constantemente el error por cambiar de máquina, o por cambios en el compilador, de los que no se le informa, o por cambiar la representación de los números en la máquina, o por cortar una parte fraccionaria del número al compilar una nueva versión del terminal... No sabes lo que puede cambiar, y no creo que sea buena idea hacer un IF o sufrir para adivinar lo que va a pasar escribiendo un error una y otra vez...

Creo que esto es algo en lo que hay que pensar.


No estoy de acuerdo. La fórmula(y=(int)(x+0,99999999999997);) no dejará de funcionar cuando se aumente la precisión, funcionará igual. Como antes, el error se producirá en el rango de la parte fraccionaria del número entre DBL_EPSILON (el valor actual: 0,000000000000022204460492503131) y 0,0000000000000003. Incluso si DBL_EPSILON disminuye a cero (lo que por supuesto no puede), el rango aumentará en el tamaño del DBL_EPSILON actual, es decir, en 2,2204460492503131e-016. Creo que incluso se puede ignorar ese rango de error.

Y qué es el término "precisión de la máquina" de todos modos. Hay precisiones estandarizadas como el doble y otros tipos. Tu razonamiento no cuenta. No diré nada sobre P.S.)) Tengo miedo de ofender.

Con respeto.

 
Nikolai Semko:

No estoy de acuerdo. La fórmula(y=(int)(x+0,99999999999997);) no dejará de funcionar cuando se aumente la precisión, funcionará igual. Como antes, el error se producirá en el rango de la parte fraccionaria del número entre DBL_EPSILON (el valor actual: 0,000000000000022204460492503131) y 0,0000000000000003. Incluso si DBL_EPSILON disminuye a cero (lo que por supuesto no puede), el rango aumentará en el tamaño del DBL_EPSILON actual, es decir, en 2,2204460492503131e-016. Creo que incluso se puede ignorar ese rango de error.

Y qué es el término "precisión de la máquina" de todos modos. Hay precisiones estandarizadas como el doble y otros tipos. Tu razonamiento no cuenta. No diré nada sobre P.S.)) Tengo miedo de ofender.

Respetuosamente.

Cuando se aplica a los precios en el mercado, por lo general puede dejar la precisión en 5-6 dígitos, y puesto que usted está trabajando en las matemáticas y no sabe quién y qué van a necesitar su nuevo cálculo rápido, debe aplicar el "principio de comportamiento tonto", según el cual no importa quién y cuándo puede poner ese valor donde la función será errónea en los cálculos.

Respétate a ti mismo, cualquiera puede restregarte por la cara, ¿merece la pena darle a un adversario una razón para hacerlo siendo grosero? Todos estamos evolucionados en algo, mientras que otras cosas simplemente no nos interesan o no son importantes.
Como estamos hablando de ensamblador y de lo que imaginas que pasa con el código después del compilador, te diré algunas frases que quizás entiendas.

Dado que un procesador tiene un número limitado de bits en cada registro, la suma y la resta o cualquier otra operación en esos registros tiene algunos aspectos complicados cuando se trata de banderas.
Como alguien que ha trabajado en ensamblador debería entender de qué estamos hablando.
así que dime en el comando ADD en diferentes modelos del procesador si habrá un desbordamiento, si se escribe el código en lenguaje ensamblador utilizando el mismo número en diferentes modelos y, en general, no puede caber en cualquier registro y se truncará, de 8 bits de última generación a 64 bits y más generación actual y cómo puede cambiar en el futuro (el desarrollo de la tecnología es tan fugaz, ha pasado sólo 40 años, y ya tenemos un procesador de múltiples núcleos en lugar de una lámpara de principios de los 80)?

mi respeto.
 
Es mejor abrir el profiling y ver en qué parte de tu código la ejecución es lenta, y obviamente no son funciones matemáticas. La mayoría son bucles, todo tipo de consultas, etc. Las funciones matemáticas son de las más rápidas y tratar de cortar algo ahí no me parece muy inteligente.

Con respeto.
 
Nikolai Semko:

Muy bien, señores, ya se han explicado. Voy a cambiar la función ceil por ti especialmente:

Esta variante es entre un 25 y un 50% más lenta que la variante:y=(int)(x+0,99999999999997); pero es máximamente correcta, funciona para enteros negativos y es 3 veces más rápida que ceil(x).

Pero yo, como plebeyo y fracasado, usaré la variante con nueves, porque considero que todos tus argumentos son aburridos y para mí, alguien que lleva mucho tiempo programando en ensamblador, y que por tanto sabe lo que pasa con el código después de la compilación, es demasiado - poner comprobaciones donde se puede prescindir de ellas.

Pasar a las personalidades significa tradicionalmente una falta de argumentos sobre el fondo. Pero aun así te hago una pregunta. ¿Qué hizo que se redujera el tiempo de un millón de redondeos de 8 a 5 o 2 milisegundos? ¿Cuál era la carga real del procesador si incluso esos retrasos resultaban ser un cuello de botella? No he encontrado ninguna necesidad de este tipo. ¿Podría ser algo abstracto, de interés académico?
 
Vladimir:
Ir a lo personal ha significado tradicionalmente una falta de argumentos de fondo.

Estoy de acuerdo, así como una falta de comportamiento cultural, en un intento de humillar a la otra persona.

Respetuosamente.

 
Andrey Kisselyov:
En cuanto a lo de "no dar crédito", no he hecho una valoración de tus argumentos y no he restado méritos, como te deseo. Respétate a ti mismo, restriega tu cara en la suciedad puede cualquiera, ya sea para dar una razón a tu oponente, pidiendo rudeza en sus acciones... todos hemos desarrollado en algo, y que simplemente no nos interesa o es irrelevante para nosotros.
Vladimir:
Apostar por las personalidades significa tradicionalmente una falta de argumentos sobre el fondo.
Andrey Kisselyov:

Estoy de acuerdo, así como la falta de comportamiento cultural al tratar de humillar al interlocutor.

¡Vaya! Desde luego, pido disculpas si he ofendido a alguien. Te habrás ofendido por lo que he dicho:

Nikolai Semko:

Muy bien, señores de los honores, eso está resuelto. Voy a cambiar la función ceil sólo para ti:

Pero yo mismo, como plebeyo y estudiante de C, utilizaré la variante con nueves, porque considero que todos sus argumentos son ñoños...

NikolaiSemko:

Y qué es el término "precisión de la máquina" de todos modos. Existe una precisión estandarizada como la doble y otros tipos. Tu razonamiento no cuenta. No diré nada sobre P.S.)) Tengo miedo de ofender.

Bueno, ya sabes... Creo que tienes una gran imaginación. En las bromas amistosas ordinarias se ve "transferencia a la personalidad", "intento de humillar al interlocutor", "menosprecio de los méritos"...

¿O me he perdido algo y en algún otro lugar he sobrepasado los límites de la decencia?

Lo siento, Andrew, pero parece que no tengo los conocimientos y la experiencia suficientes para entender lo que has escrito en esa Posdata:

Andrey Kisselyov:
P.D. puede haber otras variantes, cuando su fórmula fallará en un rango de números. ajustando constantemente el error debido al cambio a otra máquina, o a cambios en el compilador, de los que no está informado, o a cambios en la representación de los números en la máquina, o a cortarla parte fraccionaria del número al compilar en nuevas versiones del terminal... No sé qué puede cambiar, no creo que sea buena idea hacer IF o sufrir para adivinar lo que va a pasar escribiendo un error una y otra vez...
Estaría muy agradecido si alguien pudiera explicar el significado de lo que he escrito.
Una vez más, me disculpo por mi tono. Siempre defiendo el respeto mutuo entre compañeros y el comportamiento correcto. El diablo está en mi mente.
 
Vladimir:
¿Qué le llevó a reducir el tiempo de redondeo del millón de 8 a 5 o 2 milisegundos? ¿Cuál era la carga real del procesador si incluso esos retrasos resultaban ser un cuello de botella? No he encontrado ninguna necesidad de este tipo. ¿Tal vez sea algo abstracto, de interés académico?
Andrey Kisselyov:
Esmejor abrir el perfil y ver en qué parte de tu código se retrasa, y obviamente no son las funciones matemáticas. En su mayoría son los bucles, las consultas varias, etc. Las funciones matemáticas son de las más rápidas y tratar de cortar algo ahí no es muy inteligente, creo.
No sé por qué crees que soy lento. Al contrario, creo que mis algoritmos son los más rápidos. Soy un poco fanático de la velocidad. Por supuesto, el uso de este reemplazo alternativo de la función de redondeo da muy poca ganancia, sólo fracciones de un porcentaje. Pero como dice el refrán, del mundo en general. También es el caso, por ejemplo, de la aviación y la cohetería. En la lucha por reducir el peso sin comprometer la resistencia, todo se modifica, incluso los tornillos. Tal vez esa sea una de las razones por las que, en contra de la lógica, hoy en día el avión es el medio de transporte más seguro.
 
Nikolai Semko:

¡Vaya! Desde luego, pido disculpas si he ofendido a alguien. Te habrás ofendido por lo que he dicho:

Bueno, ya sabes... Creo que tienes una vívida imaginación. En una simple broma amistosa se ven "personalismos", "intentos de humillación", "menosprecio"...

Si te permites "Ridiculizar" a tus amigos, no tienes amigos, tienes payasos a tu alrededor de los que a veces te ríes y no valoras su amistad y opinión.

Nikolai Semko:

¿O me he perdido algo y en algún otro lugar he sobrepasado los límites de la decencia?

No soy tu amigo, ni tu hermano, ni siquiera una persona cercana para poder darte algún tipo de valoración, y más aún PÚBLICAMENTE.

Nikolai Semko:
Lo siento, Andriy, es que aparentemente no tengo los conocimientos y la experiencia suficientes para entender lo que has escrito en esa Posdata: te agradecería mucho que alguien me explicara el significado de lo que has escrito.

El significado de lo que está escrito en P.S., que no puedes entender por alguna razón es obvio, no sabes cómo se desarrollará la técnica que utilizas tus fórmulas rápidas, no sabes cómo se desarrollará la plataforma, no sabes lo que se añadirá posteriormente al compilador y cómo se representarán los números en el espacio de los registros del procesador, no sabes nada de ello e introducir una constante, diciendo que lo resolverá todo positivamente y siempre, es, por así decirlo, un engaño.

Si tienes en cuenta que tu fórmula será tomada por otras personas del foro y pueden ponerla en C o Pascal o algo así, tienes que tener en cuenta estos puntos también, las matemáticas no tienen límites ni en plataforma ni en lenguaje de programación.

Nikolai Semko:
Una vez más me disculpo por mi tono. Siempre abogo por el respeto mutuo entre compañeros y la corrección del comportamiento. Me pasé de la raya.

disculpas aceptadas. no vuelvas a cometer los mismos errores, de lo contrario tus palabras son basura sin sentido.

Respetuosamente.

 
Nikolai Semko:
No sé qué te hace pensar que soy lento. Al contrario, creo que mis algoritmos son los más rápidos. Soy un poco fanático de la velocidad. Por supuesto, el uso de este reemplazo alternativo de la función de redondeo da muy poca ganancia, sólo fracciones de un porcentaje. Pero como dice el refrán, del mundo en general. También es el caso, por ejemplo, de la aviación y la cohetería. En la lucha por reducir el peso sin comprometer la resistencia, todo se modifica, incluso los tornillos. Tal vez esa sea una de las razones por las que hoy en día el avión es el medio de transporte más seguro, en contra de la lógica.
Estoy a favor de un enfoque sensato de la programación, donde se puede acelerar no contra la lógica, es mejor hacerlo, pero cualquier "enfermedad" debe ser tratada, ya que es una aberración de una forma de vida saludable.

Con respeto.
 
Andrey Kisselyov:

Si te permites "ESTUDIAR" a tus amigos, no tienes amigos, tienes payasos a tu alrededor de los que a veces te burlas y no valoras su amistad y opinión.

Parece que Nikolai tenía razón sobre los nerds ))

Personalmente, no he visto ninguna referencia personal allí. Y sí que tienes muchas letras en tus posts, pero todo es off-topic y parece que discutes por discutir.

Razón de la queja: