online ejemplos descargar definicion caracteristicas c++

ejemplos - c++ online



¿Por qué no hay una flotación de 2 bytes y ya existe una implementación? (5)

Suponiendo que estoy realmente presionado por la memoria y quiero un rango más pequeño (similar a corto vs int). Los lenguajes Shader ya admiten la half para un punto flotante con la mitad de la precisión (no solo convertir hacia adelante y hacia atrás para que el valor esté entre -1 y 1, es decir, devolver un valor flotante como este: shortComingIn / maxRangeOfShort ). ¿Hay alguna implementación que ya exista para un flotador de 2 bytes?

También me interesa conocer las razones (históricas?) De por qué no hay una flotación de 2 bytes.


Bien,

Si tiene poca memoria, ¿consideró abandonar el concepto de flotación? Los flotadores usan una gran cantidad de bits solo para guardar donde está el punto decimal. Puede solucionar esto si sabe dónde necesita el punto decimal, digamos que desea guardar un valor en dólares, solo puede guardarlo en Centavos:

uint16_t cash = 50000; std::cout <<"Cash: $"<< (cash / 100) <<"."<< (cash % 100) << std::endl;

Eso es, por supuesto, solo una opción si es posible predeterminar la posición del punto decimal. Pero si puedes, siempre lo prefieres, ¡porque esto también acelera todos los cálculos!

rgds, kira :-)



Para ir un poco más lejos que Kiralein al cambiar a números enteros, podríamos definir un rango y permitir que los valores enteros de un corto representen divisiones iguales sobre el rango, con algo de simetría si se sitúan entre cero:

short mappedval = (short)(val/range);

Diferencias entre estas versiones de enteros y el uso de flotadores de media precisión:

  1. Los enteros están espaciados por igual en el rango, mientras que los flotadores se empaquetan más densamente cerca de cero
  2. El uso de enteros utilizará las matemáticas de enteros en la CPU en lugar del punto flotante. Eso es a menudo más rápido porque las operaciones de enteros son más simples. Dicho esto, asignar los valores a un rango asimétrico requeriría adiciones adicionales, etc. para recuperar el valor al final.
  3. La pérdida de precisión absoluta es más predecible; conoce el error en cada valor por lo que la pérdida total se puede calcular por adelantado, dado el rango. Por el contrario, el error relativo es más predecible utilizando un punto flotante.
  4. Puede haber una pequeña selección de operaciones que puede hacer usando pares de valores, en particular operaciones a nivel de bits, empaquetando dos cortos en un int. Esto puede reducir a la mitad el número de ciclos necesarios (o más, si las operaciones cortas implican una conversión a int) y mantiene el ancho de 32 bits. Esta es solo una versión diluida del corte de bits donde 32 bits se actúan en paralelo, que se utiliza en criptografía.

Probablemente hay una variedad de tipos en diferentes implementaciones. Un flotante equivalente a stdint.h parece una buena idea. Llama (alias?) Los tipos por su tamaño. (¿float16_t?) Un flotador de 4 bytes es solo ahora, pero probablemente no se reducirá. Los términos medio y largo casi no tienen sentido con el tiempo. Con computadoras de 128 o 256 bits podrían llegar a significar cualquier cosa.

Estoy trabajando con imágenes (1 + 1 + 1 byte / píxel) y quiero expresar el valor de cada píxel en relación con el promedio. Por lo tanto, punto flotante o punto fijo cuidadosamente, pero no 4 veces más grande que los datos en bruto, por favor. Un flotador de 16 bits suena bien.

Este GCC 7.3 no sabe "la mitad", tal vez en un contexto C ++.