Tu tarea es bastante simple. Dados dos flotantes, bit a bit o la representación binaria de ellos, y generarlo como flotante.
Por ejemplo,
Normal: 16.7472 ^ 123.61 = 7.13402e-37
Binary: 01000001100001011111101001000100 ^ 01000010111101110011100001010010 = 00000011011100101100001000010110
Normal: 2.2 ^ 4.4 = 1.17549e-38
Binary: 01000000000011001100110011001101 ^ 01000000100011001100110011001101 = 00000000100000000000000000000000
Normal: 7.898 ^ 3.4444 = 1.47705e-38
Binary: 01000000111111001011110001101010 ^ 01000000010111000110101001111111 = 00000000101000001101011000010101
Restricciones / aclaraciones:
- La entrada / salida se puede dar por cualquier método conveniente .
- El programa puede ser un programa completo o simplemente una función; Cualquiera esta bien.
- El tipo flotante puede ser de cualquier tamaño, pero el tamaño mínimo es de 2 bytes.
- Las lagunas estándar están prohibidas.
- El código más corto gana.
code-golf
bitwise
floating-point
virchau13
fuente
fuente
Respuestas:
Código de máquina x86-64, 4 bytes
En asamblea:
Esta es una función invocable que toma dos flotantes o dobles como argumentos (en
xmm0
yxmm1
) y devuelve un flotante o doble (enxmm0
).Eso coincide con las convenciones de llamadas de Windows x64 y x86-64 SysV ABI, y funciona tanto para flotantes como para dobles. (Se pasan / devuelven en los 4 u 8 bytes bajos de los registros XMM).
fuente
C ++ (gcc) ,
7432 bytesPruébalo en línea!
No he jugado golf previamente en C ++, ¡así que estoy agradecido con todos los que ayudaron a reducir a la mitad el tamaño del código! Una macro que toma punteros a dos flotantes como argumentos y modifica el primero para devolver el resultado.
¡Gracias a @ 12Me1 por guardar 2 bytes y a @Arnauld por guardar 4! ¡Gracias a @Nishioka por salvar otros 14, @Neil otros 6 y @AZTECCO y @Nishioka otros 11! ¡Gracias a @PeterCordes por guardar 5 bytes!
fuente
z=*(int*)x^*(int*)y;
.#define f(x,y)({int z=*(int*)x^*(int*)y;*(float*)&z;})
(*(int*)x^=*(int*)y)
.#define f(x,y)({*(int*)x^=*(int*)y;*(float*)x;})
ARM Thumb Machine Code,
64 bytes48 40 70 47
En asamblea:
Según la convención de llamadas de armado estándar, los dos primeros parámetros se pasan en los registros R0 y R1, los resultados se devuelven en R0 y LR contiene la dirección de retorno. Suponiendo que está utilizando el ABI de flotador suave con flotadores de 32 bits, realizará la operación deseada en 4 bytes.
-2 bytes gracias a Cody Gray
fuente
EORS r0, r1
en su lugar, para ahorrar 2 bytes? Eso es solo una instrucción de 2 bytes (48 40
), en comparación con su 4 bytesEOR
. Ya estás apuntando a Thumb, por lo que debería funcionar bien, por lo que puedo ver. La única diferencia es que actualiza los indicadores de estado, pero en este caso no le importa ese efecto secundario.s0
ys1
.Python 3 + numpy,
7559 bytesPruébalo en línea!
Define una lambda que toma dos matrices float32 numpy como argumentos y devuelve una matriz float32 numpy.
¡Gracias a @ShadowRanger por guardar 14 bytes, y a Joel por otros 2!
Si se puede descartar la importación (dado que mi lambda misma llama a métodos en objetos numpy en lugar de cualquier función numpy base), podría guardar otros 13 bytes. No estoy seguro de esto por las reglas estándar del código de golf.
fuente
numpy.float32
para que pueda usar sus métodos) y reemplazando ambosint32
usos con'i'
y elfloat32
uso con'f'
; eldtype
parámetro puede ser una cadena que se convierte en realdtype
para usted, y convenientemente,'i'
y'f'
son formas legales de hacer esos tipos, lo que elimina la necesidad de que la función importenumpy
cosas a su espacio de nombres. No estoy seguro de si es legal Code Golf eliminar la importación pero aún así asumirnumpy
entradas ...f
int32
a'i'
, cuatro defloat32
a'f'
), pero eso sigue siendo algo. Si la importación es estrictamente necesaria, puede cambiarlaimport numpy
para afirmar que el paquete existe, sin usarfrom numpy import*
para extraer nombres de él. Eso le daría otros seis bytes, hasta 61 bytes en total.Jalea + numpy,
8977 bytesPruébalo en línea!
Tiene el dudoso honor de ser más largo que el código de Python 3 que reproduce, en gran parte debido a la necesidad de convertir a / desde objetos numpy y al hecho de que Jelly no carga numpy, por lo
__import__()
que debe usarse el incorporado.Un enlace monádico que toma los dos flotantes como una lista como argumento y devuelve un flotante.
Evalúa el siguiente código de Python 3:
donde
x
yy
se sustituyen con la entrada.fuente
APL (Dyalog Unicode) , SBCS de 14 bytes
Programa completo Solicita una matriz de 1 columna de dos números de punto flotante IEEE 754 de 64 bits (binario64) de stdin. Imprime uno de esos números en stdout.
Pruébalo en línea!
⎕
prompt (los números que colapsan a no flotantes pueden forzarse a flotar con la función⊃⊢⎕DR⍨645,⍨⎕DR
)11⎕DR
convertir a binario de 1 bit (1) D Representación de ata R (matriz de 2 filas y 64 columnas)≠⌿
reducción vertical de XOR645⎕DR
convertir a flotante de 64 bits (5) Representación de D ata R (número único)fuente
VAX BASIC (luego VMS BASIC, luego Compaq Basic) , 11 bytes
Me parece un poco tonto, obviamente, a los idiomas más antiguos les irá mejor porque no se preocuparon tanto por los problemas de tipeo fuerte.
fuente
Octava , 59 bytes
Pruébalo en línea!
Typecast es la forma de conversión de MATLAB / Octave sin cambiar los bits subyacentes. Esto es obligatorio porque
bitxor
solo funciona en enteros. No tengo idea de por qué nunca implementaron números de coma flotante, aunque puede especificar explícitamente elAssumedType
como tercer argumentobitxor
. Supongo que el único uso es la programación recreativa.fuente
exp()
implementación. Pero supongo que Octave ya tiene funciones / operadores para copysign y negación. Y no les importan las micro optimizaciones como usar AND (con una máscara constante) y luego XOR para voltear condicionalmente el signo de un valor basado en el signo de otro. En un proyecto de optimización real en asm (en realidad C con intrínsecos AVX), he usado XOR de flotantes y luego he visto el bit de signo para evitar cmp contra cero.C # (compilador interactivo de Visual C #) , 92 bytes
Pruébalo en línea!
fuente
Perl 5
-p
,3127 bytes-4 bytes gracias a Grimy
Pruébalo en línea!
fuente
MATL , 10 bytes
Pruébalo en línea!
Dividir con
Z}
fue más corto que tomar dos entradas,4Z%]
fuente
C, 23 bytes
Pruébalo en línea!
Esto podría ser un poco dudoso; toma los punteros a
float
s como punteros aint
s.Sin embargo, funciona (esto es C después de todo).
Esto aprovecha la entrada aceptable al tomar un puntero a la variable y modificarla en el lugar. No se devuelve ningún valor (utilizable).
fuente
JavaScript (Node.js) ,
105101 bytesVersión de nodo más corto sugerida por @Neil
Guardado 4 bytes más gracias a @ShieruAsakoto
Toma entrada como
(x)(y)
.Pruébalo en línea!
JavaScript (ES6), 115 bytes
Toma entrada como una matriz de 2 flotadores.
Pruébalo en línea!
fuente
Buffer
ahorra unos cuantos bytes:a=>(v=new Buffer(4),[x,y]=a.map(n=>v.writeFloatLE(n)&&v.readInt32LE()),v.writeInt32LE(x^y),v.readFloatLE())
.map
)new
ennew Buffer(4)
también debería funcionar iircWolfram Mathematica , 50 bytes
Aunque sospecho firmemente que esto podría ser más complejo, los dos argumentos adicionales en
RealDigits
función parecen ser necesarios para obtener un resultado correcto.Pruébalo en línea!
fuente
Lua , 73 bytes
Pruébalo en línea!
Este código supone números enteros y flotantes sin signo de 4 bytes en los que se encuentra la configuración
tio.run
. Ejecutar como programa completo con entrada como argumentos.fuente
Rubí ,
7867 bytes-11 bytes gracias a @grawity.
Pruébalo en línea!
La entrada es una matriz de dos flotadores.
fuente
x.map{|v|[v].pack(?g).unpack(?N)[0]}
⇒x.pack("gg").unpack("NN")
Java (JDK) ,
10976 bytesPruébalo en línea!
¿Ha pasado un tiempo desde que jugué al golf en Java y no estoy seguro de si necesito la declaración en el LHS como parte del recuento de bytes? Si usara DoubleBinaryOperator, el LHS sería más corto, pero el RHS tendría que usar Double.doubleToLongBits y Double.longBitsToDouble, por lo que en realidad es más largo.
¡Gracias a Neil por un ahorro sustancial en el recuento de bytes!
fuente
Limpiar , 36 bytes
Pruébalo en línea!
Afortunadamente, los tipos
Real
yInt
son del mismo tamaño en las plataformas de 64 bits ...Desafortunadamente, se requiere una firma completa; de lo contrario, el gráfico se convierte en un pretzel y todo se daña.
fuente