Revisão IEEE 754-2008 - IEEE 754-2008 revision

IEEE 754-2008 (anteriormente conhecido como IEEE 754r ) foi publicado em agosto de 2008 e é uma revisão significativa para, e substitui, a IEEE 754-1985 de ponto flutuante padrão , enquanto em 2019 foi atualizado com uma pequena revisão IEEE 754-2019 . A revisão de 2008 estendeu o padrão anterior onde era necessário, adicionou aritmética e formatos decimais, endureceu certas áreas do padrão original que foram deixadas indefinidas e fundiu no IEEE 854 (o padrão de ponto flutuante independente de raiz).

Em alguns casos, onde as definições mais rígidas da aritmética de ponto flutuante binário podem ser incompatíveis com o desempenho de alguma implementação existente, elas se tornaram opcionais.

Processo de revisão

O padrão estava em revisão desde 2000, com data de conclusão prevista para dezembro de 2006. A revisão de um padrão IEEE segue amplamente três fases:

  1. Grupo de trabalho - um comitê que cria um projeto de padrão
  2. Cédula - os interessados ​​inscrevem-se no grupo de votação e votam na minuta (75% do grupo deve participar e 75% deve aprovar para que a minuta avance); os comentários das votações são resolvidos por um Comitê de Resolução de Cédulas (BRC) e as alterações feitas devem ser recirculadas com uma nova cédula se forem substantivas
  3. Quando todos os comentários são resolvidos e não há mais alterações, o rascunho é submetido ao IEEE para revisão, aprovação e publicação (isso também pode resultar em alterações e votos, embora isso seja raro).

Em 11 de junho de 2008, foi aprovado por unanimidade pelo IEEE Revision Committee (RevCom), e foi formalmente aprovado pelo IEEE-SA Standards Board em 12 de junho de 2008. Foi publicado em 29 de agosto de 2008.

754r fase do Grupo de Trabalho

A participação na elaboração do padrão foi aberta a pessoas com sólidos conhecimentos de aritmética de ponto flutuante. Mais de 90 pessoas participaram de pelo menos uma das reuniões mensais, realizadas no Vale do Silício , e muitas outras participaram da lista de mala direta.

Por vezes, os progressos foram lentos, o que levou o presidente a declarar na reunião de 15 de Setembro de 2005 que "não se registaram quaisquer progressos, estou a suspender estas reuniões até nova ordem por esse motivo". Em dezembro de 2005, o comitê se reorganizou de acordo com novas regras com a data de conclusão prevista para dezembro de 2006.

Novas políticas e procedimentos foram adotados em fevereiro de 2006. Em setembro de 2006, um esboço de trabalho foi aprovado para ser enviado ao comitê patrocinador principal (o Comitê de Padrões de Microprocessador IEEE, ou MSC) para edição e envio à cédula do patrocinador.

754r fase de votação

A última versão do rascunho, versão 1.2.5, enviada ao MSC foi em 4 de outubro de 2006. O MSC aceitou o rascunho em 9 de outubro de 2006. O rascunho foi alterado significativamente em detalhes durante o processo de votação.

A primeira votação do patrocinador ocorreu de 29 de novembro de 2006 a 28 de dezembro de 2006. Dos 84 membros do corpo votante, 85,7% responderam - 78,6% votaram em aprovação. Houve votos negativos (e mais de 400 comentários), então houve uma cédula de recirculação em março de 2007; este recebeu uma aprovação de 84%. Houve comentários suficientes (mais de 130) daquela votação que um terceiro rascunho foi preparado para a segunda votação de recirculação de 15 dias, que começou em meados de abril de 2007. Por uma razão técnica, o processo de votação foi reiniciado com a quarta votação em outubro 2007; também houve mudanças substanciais na minuta resultantes de comentários de 650 eleitores e de solicitações do patrocinador (o MSC do IEEE); esta votação simplesmente falhou em alcançar os 75% de aprovação exigidos. A 5ª votação teve uma taxa de resposta de 98,0% com aprovação de 91,0%, com comentários levando a mudanças relativamente pequenas. A 6ª, 7ª e 8ª cédulas mantiveram índices de aprovação de mais de 90% com progressivamente menos comentários em cada rascunho; o 8º (que não tinha comentários no escopo: 9 eram repetições de comentários anteriores e um referia-se a material não incluído no rascunho) foi submetido ao Comitê de Revisão de Padrões do IEEE ('RevCom') para aprovação como um padrão do IEEE.

754r fase de revisão e aprovação

O Comitê de Revisão de Padrões IEEE (RevCom) considerou e aprovou por unanimidade o rascunho do IEEE 754r em sua reunião de junho de 2008, e foi aprovado pelo Conselho de Padrões IEEE-SA em 12 de junho de 2008. A edição final está completa e o documento foi encaminhado para o Departamento de Publicações de Padrões do IEEE para publicação.

Publicação IEEE Std 754-2008

O novo IEEE 754 (formalmente IEEE Std 754-2008, o padrão IEEE para aritmética de ponto flutuante) foi publicado pela IEEE Computer Society em 29 de agosto de 2008 e está disponível no site IEEE Xplore

Este padrão substitui o IEEE 754-1985 . IEEE 854, o padrão de ponto flutuante Radix-Independent foi retirado em dezembro de 2008.

Resumo das revisões

Os aprimoramentos mais óbvios do padrão são a adição de um tipo binário de 16 bits e de 128 bits e três tipos decimais, algumas novas operações e muitas funções recomendadas. No entanto, houve esclarecimentos significativos na terminologia ao longo. Este resumo destaca as principais diferenças em cada uma das principais cláusulas da norma.

Cláusula 1: Visão geral

O escopo (determinado pelo patrocinador do padrão) foi ampliado para incluir formatos decimais e aritmética, e adiciona formatos extensíveis.

Cláusula 2: Definições

Muitas das definições foram reescritas para esclarecimento e consistência. Alguns termos foram renomeados para maior clareza (por exemplo, desnormalizado foi renomeado para subnormal ).

Cláusula 3: Formatos

A descrição dos formatos tornou-se mais regular, com uma distinção entre formatos aritméticos (nos quais a aritmética pode ser realizada) e formatos de intercâmbio (que têm uma codificação padrão). A conformidade com o padrão agora é definida nestes termos.

Os níveis de especificação de um formato de ponto flutuante foram enumerados para esclarecer a distinção entre:

  1. os números reais teóricos (uma reta numérica estendida)
  2. as entidades que podem ser representadas no formato (um conjunto finito de números, junto com −0 , infinitos e NaN )
  3. as representações particulares das entidades: signo-expoente-significando, etc.
  4. o padrão de bits (codificação) usado.

Os conjuntos de entidades representáveis ​​são então explicados em detalhes, mostrando que eles podem ser tratados com o significando sendo considerado como uma fração ou um inteiro. Os conjuntos particulares conhecidos como formatos básicos são definidos e as codificações usadas para o intercâmbio de formatos binários e decimais são explicadas.

Os formatos de intercâmbio binário têm a " meia precisão " (formato de armazenamento de 16 bits) e " precisão quádrupla " (formato de 128 bits) adicionados, junto com fórmulas generalizadas para alguns formatos mais amplos; os formatos básicos têm codificações de 32 bits, 64 bits e 128 bits.

Três novos formatos decimais são descritos, correspondendo aos comprimentos dos formatos binários de 32–128 bits. Eles fornecem formatos de intercâmbio decimal com significandos de 7, 16 e 34 dígitos, que podem ser normalizados ou não normalizados. Para o alcance e a precisão máximos, os formatos mesclam parte do expoente e do significando em um campo de combinação e compactam o restante do significando usando uma codificação decimal inteira (que usa Densely Packed Decimal , ou DPD, uma forma compactada de BCD ). ou codificação inteira binária convencional . Os formatos básicos são os dois tamanhos maiores, que possuem codificações de 64 e 128 bits. Fórmulas generalizadas para alguns outros formatos de intercâmbio também são especificadas.

Os formatos estendidos e extensíveis permitem aritmética em outras precisões e intervalos.

Cláusula 4: Atributos e arredondamento

Esta cláusula foi alterada para encorajar o uso de atributos estáticos para controlar operações de ponto flutuante e (além dos atributos de arredondamento necessários) permitir tratamento de exceção alternativo, ampliação de resultados intermediários, otimizações de alteração de valor e reprodutibilidade.

O atributo arredondamento para o mais próximo, empates fora de zero arredondamento foi adicionado (obrigatório para operações decimais apenas).

Cláusula 5: Operações

Esta seção tem vários esclarecimentos (principalmente na área de comparações), e várias operações anteriormente recomendadas (como copiar, negar, abs e classe) agora são necessárias.

As novas operações incluem fusão multiplica-adição (FMA), conversões explícitas, predicados de classificação (isNan ( x ), etc.), várias funções mínimas e máximas, um predicado de ordenação total e duas operações decimais específicas (samequantum e quantize).

Min e max

As operações mínimas e máximas são definidas, mas deixam alguma margem de manobra para o caso em que as entradas são iguais em valor, mas diferem na representação. Em particular:

  • min(+0,−0)ou min(−0,+0)deve produzir algo com valor zero, mas sempre pode retornar o primeiro argumento.

A fim de oferecer suporte a operações como janelas em que uma entrada NaN deve ser silenciosamente substituída por um dos pontos finais, mínimo e máximo são definidos para selecionar um número, x , em preferência a um NaN silencioso:

  • min(x,qNaN) = min(qNaN,x) = x
  • max(x,qNaN) = max(qNaN,x) = x

Essas funções são chamadas de minNum e maxNum para indicar sua preferência por um número em vez de um NaN silencioso. No entanto, na presença de uma entrada NaN de sinalização, um NaN silencioso é retornado como nas operações usuais. Após a publicação da norma, percebeu-se que essas regras tornam essas operações não associativas; por esse motivo, eles foram substituídos por novas operações no IEEE 754-2019 .

Aritmética decimal

A aritmética decimal, compatível com a usada em Java , C # , PL / I , COBOL , Python , REXX , etc., também é definida nesta seção. Em geral, a aritmética decimal segue as mesmas regras da aritmética binária (os resultados são arredondados corretamente e assim por diante), com regras adicionais que definem o expoente de um resultado (mais de um é possível em muitos casos).

Conversão de base corretamente arredondada

Ao contrário do 854, 754-2008 requer conversão de base corretamente arredondada entre decimal e ponto flutuante binário dentro de um intervalo que depende do formato.

Cláusula 6: Infinito, NaNs e bit de sinal

Esta cláusula foi revisada e esclarecida, mas sem grandes acréscimos. Em particular, ele faz recomendações formais para a codificação do estado de sinalização / NaN silencioso .

Cláusula 7: Tratamento de exceções padrão

Esta cláusula foi revisada e consideravelmente esclarecida, mas sem grandes acréscimos.

Cláusula 8: Tratamento alternativo de exceções

Esta cláusula foi estendida da Cláusula 8 anterior ('Traps') para permitir o tratamento de exceção opcional em várias formas, incluindo armadilhas e outros modelos, como try / catch. Traps e outros mecanismos de exceção permanecem opcionais, como eram no IEEE 754-1985.

Cláusula 9: Operações recomendadas

Esta cláusula é nova; ele recomenda cinquenta operações, incluindo funções de log, potência e trigonométricas, que os padrões de linguagem devem definir. Todos eles são opcionais (nenhum é necessário para estar em conformidade com o padrão). As operações incluem alguns modos dinâmicos para atributos e também um conjunto de operações de redução (soma, produto escalado, etc.).

Cláusula 10: Avaliação da expressão

Esta cláusula é nova; recomenda como os padrões de linguagem devem especificar a semântica das sequências de operações e aponta as sutilezas dos significados literais e otimizações que alteram o valor de um resultado.

Cláusula 11: Reprodutibilidade

Esta cláusula é nova; recomenda que os padrões de linguagem forneçam um meio de escrever programas reproduzíveis (ou seja, programas que produzirão o mesmo resultado em todas as implementações de uma linguagem) e descreve o que precisa ser feito para obter resultados reproduzíveis.

Anexo A: Bibliografia

Este anexo é novo; ele lista algumas referências úteis.

Anexo B: Suporte à depuração do programa

Este anexo é novo; ele fornece orientação para desenvolvedores de depurador para recursos que são desejados para suportar a depuração de código de ponto flutuante.

Índice de operações

Este é um novo índice, que lista todas as operações descritas no padrão (obrigatório ou opcional).

Discutido, mas não incluído

Devido às mudanças no design e desenvolvimento da CPU, o padrão de ponto flutuante IEEE de 2008 pode ser visto como histórico ou desatualizado como o padrão de 1985 que ele substituiu. Houve muitas discussões externas e itens não cobertos no processo de padronização, os itens abaixo são os que se tornaram de conhecimento público:

  • O Anexo "L" recomenda aos desenvolvedores de linguagem como vincular itens no padrão a recursos em uma linguagem.
  • O Anexo "U" fornece orientações sobre a escolha de definições numéricas de underflow.
Em 754, a definição de underflow era que o resultado é minúsculo e encontra uma perda de precisão.
Duas definições foram permitidas para a determinação da condição 'minúscula': antes ou depois de arredondar o resultado infinitamente preciso para a precisão de trabalho, com expoente ilimitado.
Duas definições de perda de precisão foram permitidas: resultado inexato ou perda devido apenas à desnormalização. Nenhum sistema de hardware conhecido implementou o último e foi removido do padrão revisado como uma opção.
O anexo U de 754r recomendou que apenas a pequenez após o arredondamento e inexata, pois a perda de precisão seja uma causa para o sinal de underflow.
  • O anexo "Z" introduziu tipos de dados opcionais para suportar outros formatos de ponto flutuante de largura fixa, bem como formatos de precisão arbitrária (ou seja, onde a precisão de representação e arredondamento é determinada no tempo de execução) - algum deste material foi movido para o corpo do projeto generalizando a seção 5. A precisão arbitrária foi descartada.
  • Herança e propagação de modos (tratamento de exceção, pré-substituição, arredondamento) e sinalizadores (inexato, estouro negativo, estouro, divisão por zero, inválido). O desejo é que os sinalizadores sejam propagados para um chamador; e as mudanças de modo podem ser herdadas por um receptor, mas não afetam o chamador.
  • Intervalo e outras aritméticas foram discutidos, mas não incluídos como estando fora do escopo (e um grande trabalho por si só). O trabalho está começando em 2008 em um padrão IEEE proposto para aritmética de intervalo.

Referências

links externos