es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La mejor manera de negar un número flotante en un registro XMM.

Si entiendo correctamente, no hay una función de ensamblador nativa para calcular -x a partir de un valor de flotante x almacenado en un registro Xmm. Entonces, ¿cuál es la mejor (es decir, la más rápida) manera de hacerlo?
Por supuesto, podría hacer 0 - x o -1 * x, pero eso parece demasiado laborioso. Dado que un flotante almacena un solo bit de “signo”, debería ser más simple (¿y más eficiente?) Cambiar ese bit. ¿Es así? ¿Y cómo funcionaría eso?
(Si hay una diferencia esencial entre la precisión simple y doble, por favor, elabore).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es correcto que no hay una función nativa de ensamblador para calcular -x a partir de un valor de coma flotante x almacenado en un registro Xmm. La manera más rápida de lograr esto sería utilizar operaciones de bits para cambiar el bit de signo del valor de coma flotante.

    Para los valores de coma flotante de precisión simple, el bit de signo se encuentra en el bit más significativo (bit 31) de la representación de coma flotante de 32 bits. Para cambiar este bit, se puede utilizar la instrucción XOR exclusivo con el valor 0x80000000. Por ejemplo:

    xorps xmm0, [float_value]
    mov dword ptr [float_value], xmm0
    

    Para los valores de coma flotante de doble precisión, el bit de signo se encuentra en el bit más significativo (bit 63) de la representación de coma flotante de 64 bits. Para cambiar este bit, también se puede utilizar XOR con el valor 0x8000000000000000. Por ejemplo:

    xorpd xmm0, [double_value]
    mov qword ptr [double_value], xmm0
    

    Tenga en cuenta que cambiar el bit de signo es equivalente a multiplicar el valor de coma flotante simple o doble por -1.

Comments are closed.