Minifloat

Na ciência da computação, minifloats (mini pontos flutuantes) são valores de ponto flutuante representados com muito poucos bits. Essa precisão reduzida os torna inadequados para cálculos numéricos de propósito geral, mas eles são úteis para propósitos especiais, como:

  • Computação gráfica, onde a percepção humana de cores e níveis de luz tem baixa precisão.[1] O formato de meia precisão de 16 bits é muito popular.
  • Aprendizado de máquina, que pode ser relativamente insensível à precisão numérica. Floats de 16 bits, 8 bits e até mesmo 4 bits estão sendo cada vez mais usados.[2]

Além disso, eles são frequentemente encontrados como uma ferramenta pedagógica em cursos de ciência da computação para demonstrar as propriedades e estruturas da aritmética de ponto flutuante e dos números do padrão IEEE 754.

Dependendo do contexto, minifloat pode significar qualquer tamanho menor que 32, qualquer tamanho menor ou igual a 16, ou qualquer tamanho menor que 16. O termo microfloat pode significar qualquer tamanho menor ou igual a 8.[3]

Notação

Esta página usa a notação (S.E.M) para descrever um minifloat:

  • S é o comprimento do campo de sinal (0 ou 1).
  • E é o comprimento do campo do expoente.
  • M é o comprimento do campo da mantissa (significando).

Minifloats podem ser projetados seguindo os princípios do padrão IEEE 754. Quase todos usam o menor expoente para números normais e subnormais. Muitos usam o maior expoente para infinito e NaN, indicado por (expoente especial) . Alguns minifloats usam este valor de expoente normalmente, caso em que .

O viés do expoente é . Esse valor garante que todos os números representáveis tenham um recíproco representável.

A notação pode ser convertida para um formato (B,P,L,U) como .

Uma notação comum usada no campo de aprendizado de máquina é FPn EeMm, onde as letras minúsculas são substituídas por números. Por exemplo, FP8-E4M3 é o mesmo que (1.4.3).

Uso

Muitas situações que requerem números de ponto flutuante não exigem, na verdade, muita precisão. Isso é típico para gráficos de grande alcance dinâmico (HDR) e processamento de imagens. Também é típico para redes neurais maiores, uma propriedade que vem sendo explorada desde a década de 2020 para permitir que grandes modelos de linguagem cada vez maiores sejam treinados e implantados. O exemplo de "propósito geral" mais comum é o fp16 (1.5.10) no IEEE 754-2008, chamado de "meia precisão" (em oposição à precisão simples de 32 bits e à precisão dupla de 64 bits).

O formato bfloat16 (1.8.7) corresponde aos primeiros 16 bits de um número padrão de precisão simples e era frequentemente usado em processamento de imagens e aprendizado de máquina antes que o suporte de hardware fosse adicionado para outros formatos.

Gráficos

As GPUs Radeon R300 e R420 usavam um formato de ponto flutuante "fp24" (1.7.16).[4] A "Precisão Total" no Direct3D 9.0 é um formato de ponto flutuante proprietário de 24 bits. A API gráfica D3D9 (Shader Model 2.0) da Microsoft inicialmente suportava tanto o FP24 (como no chip R300 da ATI) quanto o FP32 (como no chip NV30 da Nvidia) como "Precisão Total", além do FP16 como "Precisão Parcial" para cálculos de sombreamento (shader) de vértices e pixels realizados pelo hardware gráfico.

Em 2016, a Khronos definiu formatos não sinalizados de 10 bits (0.5.5) e 11 bits (0.5.6) para uso com o Vulkan.[5][6] Estes podem ser convertidos a partir de meia precisão positiva truncando o sinal e os dígitos finais.

Microcontroladores

Minifloats também são comumente usados em dispositivos embutidos, como microcontroladores, onde o ponto flutuante precisa ser emulado em software. Para acelerar o cálculo, a mantissa normalmente ocupa exatamente a metade dos bits, de modo que o limite do registrador endereça automaticamente as partes sem deslocamento (por exemplo, (1.3.4) em dispositivos de 4 bits).[carece de fontes?]

Aprendizado de máquina

Em 2022, a NVidia e outros anunciaram suporte ao formato "fp8" (1.5.2, E5M2). Estes podem ser convertidos a partir da meia precisão truncando os dígitos finais. Este formato suporta valores especiais como NaN e infinito. Eles também anunciaram um formato sem infinito e com apenas duas representações (positiva e negativa) para NaN, o FP8-E4M3 (1.4.3): afinal, valores especiais são desnecessários na inferência (execução de propagação direta, em oposição ao treinamento via retropropagação) de redes neurais.[2] Os formatos foram transformados em um padrão industrial chamado OCP-FP8.[7] Compressões adicionais, como FP4-E2M1 (1.2.1), também se mostraram frutíferas.[8]

O formato FP4-E2M1
.000 .001 .010 .011 .100 .101 .110 .111
0... 0 0.5 1 1.5 2 3 4 6
1... −0 −0.5 −1 −1.5 −2 −3 −4 −6

Desde 2023, o Grupo de Trabalho P3109 da IEEE SA trabalha em um padrão para minifloats otimizados para aprendizado de máquina, sistematizando a prática atual. A versão 3.0 do Relatório Interino (agosto de 2025) define uma família de muitos formatos sob o nome sistemático "binaryKpP[s/u][e/f]", onde K é o comprimento total de bits, P é a precisão (número de bits da mantissa + 1), s/u (com sinal/sem sinal) refere-se a se um bit de sinal está presente, e e/f (estendido/finito) refere-se a se o infinito está incluído. Por convenção, "s" e "e" podem ser omitidos. Para economizar espaço para mais números, não existe um "zero negativo", e há apenas uma representação para NaN; para formatos sinalizados, o NaN pode, assim, usar o padrão de bits do que seria o zero negativo. Por exemplo, o formato FP4-E2M1 pode ser aproximado da seguinte forma no P3109:[9]

O formato binary4p2sf
.000 .001 .010 .011 .100 .101 .110 .111
0... 0 0.5 1 1.5 2 3 4 6
1... NaN −0.5 −1 −1.5 −2 −3 −4 −6

(Para binary4p2se, os valores ±6 são substituídos por ±Infinito.)

Uma desvantagem de minifloats muito pequenos é que eles têm um alcance dinâmico muito pequeno representável. Para corrigir esse problema, a indústria de aprendizado de máquina inventou os "formatos de microescalonamento" (MX), um tipo de ponto flutuante de bloco. Em um formato MX, um grupo de 32 minifloats compartilha um fator de escala adicional representado por um minifloat "E8M0" (que é capaz de representar potências de 2 entre 2−127 e 2127). O MX foi definido para FP8-E5M2, FP8-E4M3, FP6-E3M2 (1.3.2), FP6-E2M3 (1.2.3) e FP4-E2M1.[10]

Exemplos

8 bits (1.4.3)

Um minifloat em 1 byte (8 bits) com 1 bit de sinal, 4 bits de expoente e 3 bits de significando (1.4.3) é demonstrado aqui. O viés do expoente é definido como 7 para centralizar os valores em torno de 1 para corresponder aos outros floats IEEE 754[11][12] de modo que (para a maioria dos valores) o multiplicador real para o expoente x é 2x−7. Todos os princípios do IEEE 754 devem ser válidos.[13] Esta forma é bastante comum para o ensino.

Sinal Expoente Significando
0 0 0 0 0 0 0 0

Zero é representado como expoente zero com uma mantissa zero. O expoente zero significa que o zero é um número subnormal com um prefixo "0.", e com a mantissa zero todos os bits após a vírgula são zero, significando que este valor é interpretado como . Números de ponto flutuante usam um zero sinalizado, então também está disponível e é igual ao positivo.

0 0000 000 = 0
1 0000 000 = −0

Para o menor expoente, o significando é estendido com "0." e o valor do expoente é tratado como 1 acima, assim como o menor número normalizado:

0 0000 001 = 0.0012 × 21 − 7 = 0.125 × 2−6 = 0.001953125 (menor número subnormal)
...
0 0000 111 = 0.1112 × 21 − 7 = 0.875 × 2−6 = 0.013671875 (maior número subnormal)

Para todos os outros expoentes, o significando é estendido com "1.":

0 0001 000 = 1.0002 × 21 − 7 = 1 × 2−6 = 0.015625 (menor número normalizado)
0 0001 001 = 1.0012 × 21 − 7 = 1.125 × 2−6 = 0.017578125
...
0 0111 000 = 1.0002 × 27 − 7 = 1 × 20 = 1
0 0111 001 = 1.0012 × 27 − 7 = 1.125 × 20 = 1.125 (menor valor acima de 1)
...
0 1110 000 = 1.0002 × 214 − 7 =  1.000 × 27 =  128
0 1110 001 = 1.0012 × 214 − 7 =  1.125 × 27 =  144
...
0 1110 110 = 1.1102 × 214 − 7 =  1.750 × 27 = 224
0 1110 111 = 1.1112 × 214 − 7 =  1.875 × 27 = 240 (maior número normalizado)

Os valores de Infinito têm o maior expoente, com a mantissa definida como zero. O bit de sinal pode ser positivo ou negativo.

0 1111 000 = +infinito
1 1111 000 = −infinito

Os valores de NaN têm o maior expoente, com a mantissa diferente de zero.

s 1111 mmm = NaN (se mmm ≠ 000)

Esta é uma tabela de todos os valores possíveis para este exemplo de float de 8 bits:

… 000 … 001 … 010 … 011 … 100 … 101 … 110 … 111
0 0000 … 0 0.001953125 0.00390625 0.005859375 0.0078125 0.009765625 0.01171875 0.013671875
0 0001 … 0.015625 0.017578125 0.01953125 0.021484375 0.0234375 0.025390625 0.02734375 0.029296875
0 0010 … 0.03125 0.03515625 0.0390625 0.04296875 0.046875 0.05078125 0.0546875 0.05859375
0 0011 … 0.0625 0.0703125 0.078125 0.0859375 0.09375 0.1015625 0.109375 0.1171875
0 0100 … 0.125 0.140625 0.15625 0.171875 0.1875 0.203125 0.21875 0.234375
0 0101 … 0.25 0.28125 0.3125 0.34375 0.375 0.40625 0.4375 0.46875
0 0110 … 0.5 0.5625 0.625 0.6875 0.75 0.8125 0.875 0.9375
0 0111 … 1 1.125 1.25 1.375 1.5 1.625 1.75 1.875
0 1000 … 2 2.25 2.5 2.75 3 3.25 3.5 3.75
0 1001 … 4 4.5 5 5.5 6 6.5 7 7.5
0 1010 … 8 9 10 11 12 13 14 15
0 1011 … 16 18 20 22 24 26 28 30
0 1100 … 32 36 40 44 48 52 56 60
0 1101 … 64 72 80 88 96 104 112 120
0 1110 … 128 144 160 176 192 208 224 240
0 1111 … Inf NaN NaN NaN NaN NaN NaN NaN
1 0000 … −0 −0.001953125 −0.00390625 −0.005859375 −0.0078125 −0.009765625 −0.01171875 −0.013671875
1 0001 … −0.015625 −0.017578125 −0.01953125 −0.021484375 −0.0234375 −0.025390625 −0.02734375 −0.029296875
1 0010 … −0.03125 −0.03515625 −0.0390625 −0.04296875 −0.046875 −0.05078125 −0.0546875 −0.05859375
1 0011 … −0.0625 −0.0703125 −0.078125 −0.0859375 −0.09375 −0.1015625 −0.109375 −0.1171875
1 0100 … −0.125 −0.140625 −0.15625 −0.171875 −0.1875 −0.203125 −0.21875 −0.234375
1 0101 … −0.25 −0.28125 −0.3125 −0.34375 −0.375 −0.40625 −0.4375 −0.46875
1 0110 … −0.5 −0.5625 −0.625 −0.6875 −0.75 −0.8125 −0.875 −0.9375
1 0111 … −1 −1.125 −1.25 −1.375 −1.5 −1.625 −1.75 −1.875
1 1000 … −2 −2.25 −2.5 −2.75 −3 −3.25 −3.5 −3.75
1 1001 … −4 −4.5 −5 −5.5 −6 −6.5 −7 −7.5
1 1010 … −8 −9 −10 −11 −12 −13 −14 −15
1 1011 … −16 −18 −20 −22 −24 −26 −28 −30
1 1100 … −32 −36 −40 −44 −48 −52 −56 −60
1 1101 … −64 −72 −80 −88 −96 −104 −112 −120
1 1110 … −128 −144 −160 −176 −192 −208 −224 −240
1 1111 … −Inf NaN NaN NaN NaN NaN NaN NaN

Existem apenas 242 valores diferentes não-NaN (se +0 e −0 forem considerados diferentes), pois 14 dos padrões de bits representam NaNs.

Para converter de/para floats de 8 bits em linguagens de programação, geralmente são necessárias bibliotecas ou funções, já que esse formato não é padronizado. Por exemplo, aqui está uma implementação de exemplo em C++ (domínio público).

8 bits (1.4.3) com B = −2

Nestes tamanhos pequenos, outros valores de viés podem ser interessantes, por exemplo, um viés de −2 fará com que os números de 0 a 16 tenham a mesma representação de bits que os números inteiros de 0 a 16, com a desvantagem de que nenhum valor não inteiro poderá ser representado.

0 0000 000 = 0.0002 × 21 - (-2) = 0.0 × 23 = 0 (número subnormal)
0 0000 001 = 0.0012 × 21 - (-2) = 0.125 × 23 = 1 (número subnormal)
0 0000 111 = 0.1112 × 21 - (-2) = 0.875 × 23 = 7 (número subnormal)
0 0001 000 = 1.0002 × 21 - (-2) = 1.000 × 23 = 8 (número normalizado)
0 0001 111 = 1.1112 × 21 - (-2) = 1.875 × 23 = 15 (número normalizado)
0 0010 000 = 1.0002 × 22 - (-2) = 1.000 × 24 = 16 (número normalizado)

8 bits (1.3.4)

Qualquer alocação de bits é possível. Um formato poderia escolher dar mais bits ao expoente caso precisem de mais alcance dinâmico com menos precisão, ou dar mais bits ao significando caso precisem de mais precisão com menos alcance dinâmico. No extremo, é possível alocar todos os bits para o expoente (1.7.0), ou todos, exceto um, para o significando (1.1.6), deixando o expoente com apenas um bit. O expoente deve ter pelo menos um bit, caso contrário não fará mais sentido como um float, tornando-se apenas um número com sinal.

Aqui está um quadro de todos os valores possíveis para (1.3.4). garante que a precisão permaneça de pelo menos 0,5 em todo o intervalo.[14]

… 0000 … 0001 … 0010 … 0011 … 0100 … 0101 … 0110 … 0111 … 1000 … 1001 … 1010 … 1011 … 1100 … 1101 … 1110 … 1111
0 000 … 0 0.015625 0.03125 0.046875 0.0625 0.078125 0.09375 0.109375 0.125 0.140625 0.15625 0.171875 0.1875 0.203125 0.21875 0.234375
0 001 … 0.25 0.265625 0.28125 0.296875 0.3125 0.328125 0.34375 0.359375 0.375 0.390625 0.40625 0.421875 0.4375 0.453125 0.46875 0.484375
0 010 … 0.5 0.53125 0.5625 0.59375 0.625 0.65625 0.6875 0.71875 0.75 0.78125 0.8125 0.84375 0.875 0.90625 0.9375 0.96875
0 011 … 1 1.0625 1.125 1.1875 1.25 1.3125 1.375 1.4375 1.5 1.5625 1.625 1.6875 1.75 1.8125 1.875 1.9375
0 100 … 2 2.125 2.25 2.375 2.5 2.625 2.75 2.875 3 3.125 3.25 3.375 3.5 3.625 3.75 3.875
0 101 … 4 4.25 4.5 4.75 5 5.25 5.5 5.75 6 6.25 6.5 6.75 7 7.25 7.5 7.75
0 110 … 8 8.5 9 9.5 10 10.5 11 11.5 12 12.5 13 13.5 14 14.5 15 15.5
0 111 … Inf NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 000 … −0 −0.015625 −0.03125 −0.046875 −0.0625 −0.078125 −0.09375 −0.109375 −0.125 −0.140625 −0.15625 −0.171875 −0.1875 −0.203125 −0.21875 −0.234375
1 001 … −0.25 −0.265625 −0.28125 −0.296875 −0.3125 −0.328125 −0.34375 −0.359375 −0.375 −0.390625 −0.40625 −0.421875 −0.4375 −0.453125 −0.46875 −0.484375
1 010 … −0.5 −0.53125 −0.5625 −0.59375 −0.625 −0.65625 −0.6875 −0.71875 −0.75 −0.78125 −0.8125 −0.84375 −0.875 −0.90625 −0.9375 −0.96875
1 011 … −1 −1.0625 −1.125 −1.1875 −1.25 −1.3125 −1.375 −1.4375 −1.5 −1.5625 −1.625 −1.6875 −1.75 −1.8125 −1.875 −1.9375
1 100 … −2 −2.125 −2.25 −2.375 −2.5 −2.625 −2.75 −2.875 −3 −3.125 −3.25 −3.375 −3.5 −3.625 −3.75 −3.875
1 101 … −4 −4.25 −4.5 −4.75 −5 −5.25 −5.5 −5.75 −6 −6.25 −6.5 −6.75 −7 −7.25 −7.5 −7.75
1 110 … −8 −8.5 −9 −9.5 −10 −10.5 −11 −11.5 −12 −12.5 −13 −13.5 −14 −14.5 −15 −15.5
1 111 … −Inf NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

Tabelas como as acima podem ser geradas para qualquer combinação de valores SEMB (sinal, expoente, mantissa/significando e viés) usando um script em Python ou em GDScript.

6 bits (1.3.2)

Com apenas 64 valores, é possível representar todos os valores em um diagrama, o que pode ser instrutivo.

Estes gráficos demonstram a matemática de dois minifloats de 6 bits (1.3.2), seguindo as regras do IEEE 754 de forma exata. Xis verdes são resultados NaN, Xis cianos são resultados de +Infinito, Xis magentas são resultados de −Infinito. A faixa de resultados finitos é preenchida com curvas que unem valores iguais, azul para positivo e vermelho para negativo.

4 bits (1.2.1)

O menor tamanho de float possível que segue todos os princípios IEEE, incluindo números normalizados, números subnormais, zero sinalizado, infinito sinalizado e múltiplos valores NaN, é um float de 4 bits com 1 bit de sinal, 2 bits de expoente e 1 bit de mantissa.[15]

.000 .001 .010 .011 .100 .101 .110 .111
0... 0 0.5 1 1.5 2 3 Inf NaN
1... −0 −0.5 −1 −1.5 −2 −3 −Inf NaN

Este exemplo de float de 4 bits é muito semelhante ao formato FP4-E2M1 usado pela Nvidia, e aos formatos binary4p2s* da IEEE P3109, conforme descrito acima, exceto por uma alocação diferente dos valores especiais de Infinito e NaN. Este exemplo usa uma alocação tradicional seguindo os mesmos princípios que outros tamanhos de float. Floats projetados para casos de uso de aplicações específicas, em vez de interoperabilidade de propósito geral, podem preferir usar aqueles padrões de bits para números finitos, dependendo das necessidades da aplicação.

Outros formatos de float de 4 bits incluem o MXFP4 e NVFP4 (e a troca de padrões de bits separados para mais e menos Inf e NaN, conforme acima). "O valor no formato varia aproximadamente de −6 a 6. Por exemplo, os valores na faixa poderiam incluir 0.0, 0.5, 1.0, 1.5, 2, 3, 4, 6 (o mesmo para a faixa negativa)."[16] Isso também tem um formato de escala em separado, armazenado de modo diferente por bloco.

3 bits (1.1.1)

Se os números normalizados não forem necessários, o tamanho pode ser reduzido para 3 bits, diminuindo o expoente para 1.

.00 .01 .10 .11
0... 0 1 Inf NaN
1... −0 −1 −Inf NaN

2 bits (0.1.1) e 3 bits (0.2.1)

Em situações em que o bit de sinal pode ser excluído, cada um dos exemplos acima pode ser reduzido em mais 1 bit, mantendo apenas a primeira linha das tabelas acima. Um float de 2 bits com expoente de 1 bit e mantissa de 1 bit teria apenas os valores 0, 1, Inf e NaN.

1 bit (0.1.0)

Remover a mantissa permitiria apenas dois valores: 0 e Inf. Remover o expoente não funciona; as fórmulas acima produziriam 0 e raiz quadrada(2)/2. O expoente deve ter pelo menos 1 bit ou não fará mais sentido como um float (seria apenas um número sinalizado).

Veja também

Referências

  1. Mocerino, Luca; Calimera, Andrea (24 de novembro de 2021). «AxP: A HW-SW Co-Design Pipeline for Energy-Efficient Approximated ConvNets via Associative Matching». Applied Sciences. 11 (23). doi:10.3390/app112311164 
  2. a b https://developer.nvidia.com/blog/nvidia-arm-and-intel-publish-fp8-specification-for-standardization-as-an-interchange-format-for-ai/ (anúncio conjunto da Intel, NVIDIA, Arm); https://arxiv.org/abs/2209.05433 (artigo pre-print escrito conjuntamente por pesquisadores das 3 empresas mencionadas)
  3. https://www.mrob.com/pub/math/floatformats.html#microfloat Microfloats
  4. Buck, Ian (13 de março de 2005). «Chapter 32. Taking the Plunge into GPU Computing». In: Pharr, Matt. GPU Gems. [S.l.]: Addison-Wesley. ISBN 0-321-33559-7. Consultado em 5 de abril de 2018 .
  5. Garrard, Andrew. «10.3. Unsigned 10-bit floating-point numbers». Khronos Data Format Specification v1.2 rev 1. Khronos Group. Consultado em 10 de agosto de 2023 
  6. Garrard, Andrew. «10.2. Unsigned 11-bit floating-point numbers». Khronos Data Format Specification v1.2 rev 1. Khronos Group. Consultado em 10 de agosto de 2023 
  7. «OCP 8-bit Floating Point Specification (OFP8) Revision 1.0». Maio de 2023 
  8. «Accelerate LLM Inference on Your Local PC» 
  9. «IEEE Working Group P3109 Interim Report on Binary Floating-point Formats for Machine Learning» (PDF). GitHub. IEEE Working Group P3109. 5 de agosto de 2025  (versão mais recente)
  10. «OCP Microscaling Formats (MX) Specification Version 1.0». Open Compute Project. Consultado em 21 de fevereiro de 2025. Cópia arquivada em 24 de fevereiro de 2024 
  11. A meia precisão IEEE tem 5 bits de expoente com viés de 15 (), a precisão simples IEEE tem 8 bits de expoente com viés de 127 (), a precisão dupla IEEE tem 11 bits de expoente com viés de 1023 () e a precisão quádrupla IEEE tem 15 bits de expoente com viés de 16383 (). Veja o artigo Viés do expoente para mais detalhes.
  12. O'Hallaron, David R.; Bryant, Randal E. (2010). Computer systems: a programmer's perspective 2 ed. Boston, Massachusetts, US: Prentice Hall. ISBN 978-0-13-610804-7  Parâmetro desconhecido |linkautor2= ignorado (ajuda)
  13. Burch, Carl. «Floating-point representation». Hendrix College. Consultado em 29 de agosto de 2023 
  14. «An 8-Bit Floating Point Representation» (PDF). Cópia arquivada (PDF) em 8 de julho de 2024 
  15. Shaneyfelt, Dr. Ted. «Dr. Shaneyfelt's Floating Point Construction Gizmo». Dr. Ted Shaneyfelt. Consultado em 29 de agosto de 2023. Arquivado do original em 15 de dezembro de 2024 
  16. «Introducing NVFP4 for Efficient and Accurate Low-Precision Inference». NVIDIA Technical Blog (em inglês). 24 de junho de 2025. Consultado em 15 de março de 2026 

Ligações externas

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.