Pesquisa · Mapa mental

Formato de ponto flutuante de precisão quádrupla

Na computação, a precisão quádrupla é um formato de número de computador baseado em ponto flutuante binário que ocupa 16 bytes com precisão de pelo menos o dobro da precisão dupla de 53 bits.

Fonte: Wikipédia (pt)Atualizado em 27/06/2026
01

Formato de ponto flutuante binário de precisão quádrupla IEEE 754: binary128

O padrão IEEE 754 especifica que um binary128 possui: O bit de sinal determina o sinal do número (inclusive quando este número é zero, que possui sinal). "1" representa negativo. Isso fornece uma precisão de 33 a 36 dígitos decimais significativos. Se uma string decimal com no máximo 33 dígitos significativos for convertida para o formato de precisão quádrupla IEEE 754, resultando em um número normal, e depois convertida de volta para uma string decimal com o mesmo número de dígitos, o resultado final deve corresponder à string original. Se um número de precisão quádrupla IEEE 754 for convertido para uma string decimal com pelo menos 36 dígitos significativos e depois convertido de volta para a representação de precisão quádrupla, o resultado final deve corresponder ao número original. O formato é escrito com um bit condutor implícito com valor 1, a menos que o expoente seja armazenado com todos os zeros (usado para codificar números subnormais e zeros). Assim, apenas 112 bits do significando aparecem no formato de memória, mas a precisão total é de 113 bits (aproximadamente 34 dígitos decimais: log10(2113) ≈ 34,016) para valores normais; os subnormais têm uma degradação gradual de precisão até 1 bit para o menor valor não nulo. Os bits são dispostos como:

Codificação do expoente

O expoente de ponto flutuante binário de precisão quádrupla é codificado usando uma representação em binário deslocado (ou viés), com o deslocamento zero sendo 16383; isso também é conhecido como viés do expoente no padrão IEEE 754. Assim, conforme definido pela representação em binário deslocado, para obter o expoente verdadeiro, o deslocamento de 16383 precisa ser subtraído do expoente armazenado. Os expoentes armazenados 000016 e 7FFF16 são interpretados de forma especial. O menor valor estritamente positivo (subnormal) é 2−16494 ≈ 10−4965 e tem uma precisão de apenas um bit. O menor valor normal positivo é 2−16382 ≈ 3,3621 × 10−4932 e tem uma precisão de 113 bits, ou seja, ±2−16494 também. O valor máximo representável é 216384 − 216271 ≈ 1,1897 × 104932.

Exemplos de precisão quádrupla

Estes exemplos são dados na representação de bits, em hexadecimal, do valor de ponto flutuante. Isso inclui o sinal, o expoente (com viés) e o significando. 0000 0000 0000 0000 0000 0000 0000 000116 = 2−16382 × 2−112 = 2−16494 ≈ 6,4751751194380251109244389582276465525 × 10−4966 (menor número subnormal positivo) 0000 ffff ffff ffff ffff ffff ffff ffff16 = 2−16382 × (1 − 2−112) ≈ 3,3621031431120935062626778173217519551 × 10−4932 (maior número subnormal) 0001 0000 0000 0000 0000 0000 0000 000016 = 2−16382 ≈ 3,3621031431120935062626778173217526026 × 10−4932 (menor número normal positivo) 7ffe ffff ffff ffff ffff ffff ffff ffff16 = 216383 × (2 − 2−112) ≈ 1,1897314953572317650857593266280070162 × 104932 (maior número normal)

02

Aritmética dupla-dupla

Uma técnica comum de software para implementar uma precisão quase quádrupla usando pares de valores de precisão dupla é algumas vezes chamada de aritmética dupla-dupla. Usando pares de valores de precisão dupla IEEE com significandos de 53 bits, a aritmética dupla-dupla fornece operações em números com significandos de pelo menos 2 × 53 = 106 bits (na verdade, 107 bits exceto para alguns dos maiores valores, devido ao intervalo limitado do expoente), apenas ligeiramente menos precisa do que o significando de 113 bits da precisão quádrupla IEEE binary128. O intervalo de um dupla-dupla permanece essencialmente o mesmo que o do formato de precisão dupla porque o expoente ainda possui 11 bits, significativamente menor do que o expoente de 15 bits da precisão quádrupla IEEE (um intervalo de 1,8 × 10308 para dupla-dupla contra 1,2 × 104932 para binary128). Em particular, um valor de precisão dupla-dupla/quádrupla q na técnica dupla-dupla é representado implicitamente como uma soma q = x + y de dois valores de precisão dupla x e y, cada um dos quais fornece metade do significando de q. Ou seja, o par (x, y) é armazenado no lugar de q, e as operações nos valores de q (+, −, ×, ...) são transformadas em operações equivalentes (mas mais complicadas) nos valores de x e y. Assim, a aritmética nesta técnica se reduz a uma sequência de operações de precisão dupla; como a aritmética de precisão dupla é comumente implementada em hardware, a aritmética dupla-dupla é tipicamente substancialmente mais rápida do que as técnicas mais gerais de aritmética de precisão arbitrária.

03

Implementações

A precisão quádrupla é frequentemente implementada em software por uma variedade de técnicas (como a técnica dupla-dupla acima, embora essa técnica não implemente a precisão quádrupla IEEE), visto que o suporte direto por hardware para precisão quádrupla é menos comum (veja "Suporte por hardware" abaixo). Pode-se usar bibliotecas gerais de aritmética de precisão arbitrária para obter precisão quádrupla (ou superior), mas implementações especializadas de precisão quádrupla podem alcançar um desempenho superior.

Suporte a linguagens de programação

Uma questão separada é a extensão em que os tipos de precisão quádrupla são diretamente incorporados nas linguagens de programação de computadores. A precisão quádrupla é especificada em Fortran pelo real(real128) (o módulo iso_fortran_env do Fortran 2008 deve ser usado, a constante real128 é igual a 16 na maioria dos processadores), ou como real(selected_real_kind(33, 4931)), ou de uma forma não padronizada como REAL*16. (O REAL*16 de precisão quádrupla é suportado pelo Intel Fortran Compiler e pelo compilador GNU Fortran nas arquiteturas x86, x86-64 e Itanium, por exemplo.) Para a linguagem de programação C, a ISO/IEC TS 18661-3 (extensões de ponto flutuante para C, tipos de intercâmbio e estendidos) especifica o _Float128 como o tipo que implementa o formato de precisão quádrupla IEEE 754 (binary128). Alternativamente, em C/C++ com alguns sistemas e compiladores, a precisão quádrupla pode ser especificada pelo tipo long double, mas isso não é exigido pela linguagem (que exige apenas que o long double seja pelo menos tão preciso quanto o double), nem é comum.

Suporte por hardware

A precisão quádrupla IEEE foi adicionada ao IBM System/390 G5 em 1998, e é suportada em hardware nos processadores z/Architecture subsequentes. A CPU IBM POWER9 (Power ISA 3.0) possui suporte nativo por hardware de 128 bits. O suporte nativo a floats de 128 bits IEEE é definido nas arquiteturas PA-RISC 1.0, SPARC V8 e V9 (por exemplo, existem 16 registradores de precisão quádrupla %q0, %q4, ...), mas nenhuma CPU SPARC implementa operações de precisão quádrupla em hardware. O formato de precisão estendida não IEEE (128 bits de armazenamento, 1 bit de sinal, 7 bits de expoente, 112 bits de fração, 8 bits não utilizados) foi adicionado à série IBM System/370 (décadas de 1970–1980) e estava disponível em alguns modelos System/360 na década de 1960 (System/360-85, -195, e outros por solicitação especial ou simulados por software do SO).

Vídeos recomendados

Fontes consultadas

Continue pesquisando