Saturday 25 November 2017

Opções normalizadas de forma binária


Como representar 0,148 2 em aritmética de ponto flutuante normalizado com o formato (0,148) (0,00100101111.) 2 Nós deslocamos 3 bits para a esquerda para torná-lo normalizado (1,00101111) 2 2. Exponente 1164 (75) (1001011) 2 e Mantissa (01001111) 2. Portanto, a representação de ponto flutuante é (0100101100101111) 2 (4B2F) Representação A Mas se armazenarmos a mantisse desnormalizada em registro de 8 bits, então não armazenará os últimos três 1s e então a mantisa teria normalizado de (0.00100101) 2 para (1.00101000 ) 2 inserindo 3 0s em vez de 1s. A representação teria sido (0100101100101000) 2 (4B28) Representação B Então, ao normalizar, o processador leva em conta os bits de mantisa desnormalizados além de 8 bits também. Ou simplesmente arreda-se qual é o correto: A ou B Ele armazena a mantisa Na representação de ponto fixo Como funciona toda esta página Esta página é traduzida do original usando o tradutor do Google. IEEE 754 - flutuador aritmético binário padrão Autor: Yashkardin Vladimirnbsp nbsp softelectro. ru nbsp nbsp 2009-2017 nbsp nbsp nbsp nbsp nbsp infosoftelectro. ru 1. Título Padrão. Este padrão é projetado associação IEEE (Instituto de Engenheiros Elétricos e Eletrônicos) e é usado para representar números reais (ponto flutuante) em código binário. O padrão mais utilizado para ponto flutuante, usado por muitos microprocessadores e dispositivos lógicos e software. IEEE: IEC 60559: 1989, Aritmética binária de ponto flutuante para sistemas de microprocessadores (IEC, IEC 60559: 1989) 559: 1989 - a designação antiga do padrão) Em 2008, a associação lançou o IEEE padrão IEEE 754-2008, que incluiu o padrão IEEE 754-1985. 2. Breve descrição do padrão. A edição original do padrão: Padrão IEEE para Aritmética Binária de Ponto Flutuante nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp Copyright 1985 pelo Instituto de Engenheiros Elétricos e Eletrônicos, Inc 345 East 47th Street, Nova Iorque, NY 10017, EUA Padrão contém 23 páginas de texto em 7 seções e um anexo: 1.Scope 1.1 Objetivos de Implementação 1.2 Inclusões 1.3 Exclusões 2.Definições 3. Padrões 3.1 Conjuntos de Valores 3.2 Formatos Básicos 3.3 Formatos Estendidos 3.4 Combinações de Formatos 4.Rondando () 4.1 Rodada Para os arredondamentos direcionados 4.2 mais próximos 4.3 Precisão de arredondamento 5.Operações 5.1 Aritmética 5.2 Raiz quadrada 5.3 Conversões de formato de ponto flutuante 5.4 Conversão entre formatos de ponto flutuante e inteiro 5.5 Número de ponto flutuante redondo para valor inteiro 5.6 Conversão decimal binária 5.7 Comparação 6.Infinidade, NaNs e Signed Zero 6.1 Infinity Arithmetic 6.2 Operações com NaNs 6.3 O bit de sinal 7.Excepções 7.1 Operação inválida 7.2 Divisão por zero 7.3 Sobrecarga 7.4 Unde Rflow 7.5 Inexact 8.Traps 8.1 Trap Handler 8.2 Precedência A. Recommended Functions and Predicates nbsp nbsp nbsp nbsp Infelizmente, o IEEE evoluiu de uma organização internacional de engenharia pública (que era originalmente) uma organização comercial. Esta organização possui os direitos autorais para publicar o padrão IEEE754-1985. Então, se você quiser ler, com o padrão original, você tem que comprá-lo por cerca de 80. No entanto, a lei russa permite-me comentar sobre o ensino desta norma. Por conseguinte, os outros Ill dão uma apresentação arbitrária da norma e expressam a sua opinião sobre ela para fins de formação. Padrão IEEE 754-1985 irá determinar: Ser normalizado como números de ponto flutuante positivos e negativos Como representar os números de ponto flutuante desnormalizados positivo e negativo Como representar o número de zero Como um valor especial para representar o infinito Como representar um valor especial (NaN ou NaNs) Quatro modos de arredondamento IEEE 754-1985 define quatro formatos para números de ponto flutuante: Single-precision (single-precision) 32 bits Double-precision (double-precision) 64-bit With single Precisão estendida (precisão ampliada única) 43 bits (raramente usado) Precisão de dupla extensão (precisão de dupla extensão) 79 bits (normalmente use 80 bits) 3. Conceitos básicos na representação de números de ponto flutuante. 3.1 Submissão de uma forma exponencial normalizada. Pegue, por exemplo, o número decimal 155.625 Imagine o número em uma forma exponencial normalizada: 1,55625872910 2 1,556258729exp 10 2 Número 1,556258729exp 10 2 consiste em duas partes: uma mantisa M 1.55625 e exponente exp 10 2 Se a Mantissa está na faixa de 1 -2. 3.2 Apresentação de uma forma exponencial desnormalizada. Tomemos, por exemplo, o número decimal 155,625 Imagine o número de maneira exponencial desnormalizada: 0,155625872910 3 0,1556258729exp 10 3 O número 0,1556258729exp 10 3 consiste em duas partes: uma mantissa M 0,155625 e exponente exp 10 3 Se a Mantissa está na faixa de 0,1 -3. 3.3 Conversão de decimal para número de ponto flutuante binário. Nosso problema é reduzido a um número de ponto flutuante decimal em número de ponto flutuante binário em forma normalizada exponencial. Para fazer isso, expandimos o número dado de dígitos binários: 155,625 187292 7 087292 6 087292 5 187292 4 187292 3 087292 2 187292 1 187292 0 187292 -1 087292 -2 187292 -3 155 625 128 0 0 16 8 0 2 1 0,5 0 0,125 155,625 10 10011011,101 2 - o número de ponto flutuante decimal e binário Deixe o número resultante na forma normalizada em sistema decimal e binário: 1,556258729exp 10 2 1,00110111018729exp 2 111 Como resultado, temos os principais componentes de A exponencial normalizada de números binários: Mantissa M1.0011011101 Exponente exp 2 111 4. Descrição de números de conversão de IEEE 754. 4.1 A transformação de números binários normalizados em formato de 32 bits IEEE 754 A principal aplicação em formatos de tecnologia e programação foi 32 e 64 Bits Por exemplo, em VB usando os tipos de dados único (32 bits) e duplo (64 bits). Considere a transformação do formato binário 10011011.101 de precisão única (32 bits) IEEE Standard 754. Outros formatos dos números no IEEE 754 é uma cópia ampliada da precisão única. Para fornecer o número no formato de precisão única IEEE 754 deve trazê-lo para a forma binária normalizada. Em 3, fizemos essa conversão no número 155.625. Agora considere, como um número binário normalizado é convertido para um formato de 32 bits IEEE 754 Descrição da transformação no formato de 32 bits IEEE 754: Número pode ser ou -. Portanto, jogue um pouco para designar o sinal de: 0-positive 1-negative Este bit mais significativo para a seqüência de 32 bits. Em seguida, vá bits exponentes, isso aloca 1 byte (8 bits). O expositor pode ser, como o número, com o sinal ou -. Para determinar o sinal do expoente, para não introduzir ainda outro bit de sinal, adicione o deslocamento ao expoente no meio de byte 127 (0111 1111). Ou seja, se a nossa exposição 7 (111 em binário), em seguida deslocou expoente 7 127 134 e se os nossos expositores foi -7, em seguida, deslocamento Stands 127-7 120. Biased expoente é escrito no atribuído 8 bits. No entanto, quando precisaremos obter números binários exponenciais, simplesmente subtrai 127 deste byte. Os 23 bits restantes reservados para a mantissa. No entanto, o primeiro bit de mantisa binária normalizado é sempre 1, uma vez que o número está no intervalo 1 A tabela mostra o número decimal 155.625 no formato de 32 bits IEEE754: 001 1011 1010 0000 0000 0000 2 971 87761,99584e292 Do acima, Dado que a maior parte dos números no formato IEEE754 tem um pequeno erro relativo estável: O erro relativo possível máximo para o número é Single 2 -23 100 11,920928955078125e-6 O erro relativo possível máximo para o número de Double 2 -52 100 2,220446049492503130808472633361816e-14 7.5 Informações gerais para o número de padrão de IEEE de precisão simples e dupla 754. Tabela 3. Informações sobre o formato 3264 bit no padrão ANSI IEEE Std 754-1985 número de comprimento, bit offset o exponencial (E), bits O restante da mantisa (M), números binários desnormalizados números binários normalizados número desnormalizado número decimal F (-1) S 87292 (E -126) 8729 M2 23 F (-1) S 87292 (E -1022) 8729M2 52 normalizado Número de decimal F (-1) S 87292 (E-12 7) 8729 (1 M2 23) F (-1) S 87292 (E-1023) 8729 (1M2 52) Abs. Max. Número de erro Rel. Max. Denors do erro. Número Rel. Max. Normas de erro. Número 2 -149 8776 1,401298468729e -45 2 -1074 8776 4,940656468729e -324 2 127 8729 (2-2 -23) 8776 3,402823478729e 38 2 1023 8729 (2-2 -52) 8776 1,797693138729e 308 8 . Arredondando números no padrão IEEE 754. Ao apresentar os números de ponto flutuante no padrão IEEE 754, muitas vezes têm números arredondados. O padrão fornece quatro maneiras de arredondamento de números. Formas de arredondamento de números de IEEE 754: Arredondamento tendendo para o inteiro mais próximo. O arredondamento tende para zero. O arredondamento tende a 8734 O arredondamento tende a -8734 Tabela 3. Exemplos de arredondamento para um decimal para o inteiro mais próximo Como o arredondamento é mostrado nos exemplos na Tabela 3. Quando você converte um número para escolher uma das formas de arredondar. Por padrão, esta é a primeira maneira, arredondando para o número inteiro mais próximo. Muitas vezes em diferentes dispositivos usando o segundo método - arredondado para zero. Ao arredondar para zero, basta descartar números de nível sem sentido, então este é o mais fácil na implementação de hardware. 9. Problemas de computação causados ​​pelo uso do padrão IEEE754. O padrão IEEE 754 é amplamente utilizado em engenharia e programação. A maioria dos microprocessadores modernos são fabricados com a realização de hardware de representações de variáveis ​​reais no formato IEEE754. A linguagem de programação e o programador não podem alterar esta situação, não existe um repouso de um número real no microprocessador. Ao criar a representação padrão IEEE754-1985 de uma variável real na forma de 4 ou 8 bytes parecem valor muito grande, uma vez que a quantidade de RAM MS-DOS era igual a 1 MB. Um programa neste sistema poderia ser usado apenas 0,64 MB. Para sistemas operacionais modernos o tamanho de 8 bytes é nulo e nulo, no entanto as variáveis ​​na maioria dos microprocessadores continuam a ser no formato IEEE754-1985. Considere a computação de erro, causada pelo uso de números no formato de IEEE754 9.1 Erros associados à precisão de representação de números reais no formato IEEE754. Uma redução perigosa. Este erro está sempre presente em cálculos de computador. A razão da sua ocorrência está descrita no ponto 7.4. -6 para o duplo 10 -14 Os erros absolutos podem ser significativos, como para o único 10 31 e para o duplo 10 292, o que pode causar problemas com os cálculos. Se a contagem de amostras no papel, a resposta é 1. O erro absoluto é 7. Por que obter a resposta errada Número 123456789 no único 4CEB79A3hex (ieee) 123456792 (dec) relatório de erro absoluto é 3 Número 123456788 no único 4CEB79A2hex (ieee) 123456784 (dec) relatório de erro absoluto é -4 erro relativo nos números iniciais de aproximadamente 3,24 e-6 Como resultado, um erro relativo da operação do resultado foi de 800, ou seja, aumentou 2,5 e 8 vezes. Isto é o que eu chamo de uma redução perigosa. Isto é, diminuição catastrófica da precisão na operação em que o valor absoluto do resultado é muito menor do que qualquer das variáveis ​​de entrada. Na verdade, a precisão do erro da representação dos mais inócuos nos cálculos do computador e geralmente muitos programadores não estão prestando atenção. No entanto, eles podem ser muito frustrante. 9.2 Erros associados à coerção indevida dos tipos de dados. Erro selvagem. Esses erros são causados ​​pelo fato de que o número original apresentado no formato de simples e duplo em um formato geralmente não são iguais entre si. Por exemplo: o número original 123456789,123456789 Único: 4CEB79A3 123456792,0 (dec) Duplo: 419D6F34547E6B75 123456789,12345679104328155517578125 A diferença entre a quantidade única e dupla: 2,87654320895671844482421875 Aqui está um exemplo para VB: O erro relativo do resultado é: 8734 (Infinito) Este erro é chamado de zero sujo. Se as variáveis ​​levam ao mesmo tipo, então esse erro não acontecerá. Portanto, as variáveis ​​e os resultados intermediários dos cálculos devem ser trazidos para o mesmo tipo de dados. Por exemplo, a exigência de mostrar o mesmo tipo descrito na linguagem C padrão para ISO IEC 9899: 1999. Preste atenção ao fato de que não basta apenas trazer todos os dados originais para um único tipo. Necessário para trazer os resultados das operações intermediárias para o mesmo tipo. Aqui está um exemplo de um erro no resultado intermediário: Aqui o erro surge porque o resultado intermediário de 1 3 na linha c c-1 3 será do tipo double, not single. Para se livrar do erro você tem que dar um resultado intermediário para o tipo de operador único usando o CSng de elenco. Um exemplo de trazer o tipo de dados para o GNU C, enviado por Gregory Sitkarevym: na segunda versão você pode ver que a divisão das constantes no resultado intermediário é dada ao tipo de flutuador (precisão única em C). Essas opções foram compiladas e executadas usando o GNU C. Se você compilar e executar as opções acima são mostradas no VC (Visual Studio), os resultados serão revertidos. Ou seja, a opção 2 seria o resultado de -9.934108, ea opção 1 Resultado: 0.000000. Portanto, pode ser decepcionante conclusão de que o resultado dos cálculos pode depender do tipo e versão do compilador. Neste caso, podemos assumir que o compilador VC fornece automaticamente os tipos de variáveis ​​e a tentativa de trazer forçosamente o mesmo tipo falha. Se a Opção 1 (sem o elenco) se encontrar com variável de dupla precisão (duplo), o erro não trará dados e Resultado 0.000000. Assim, na maioria dos casos, livrar-se dos dados do elenco é simplesmente usar o tipo de dados dobrar e esquecer Sobre o tipo de single (float). Erros computacionais causados ​​por não trazer o tipo de dados que eu chamo de erros Wild como eles se relacionam com a ignorância dos padrões e a teoria da programação (ou seja, com educação básica pobre) 9.3 Erros causados ​​pela mudança da mantisa. Buracos circulares. Esses erros estão associados à perda de precisão do resultado em números de interseção de mantissas incompletas no eixo real. Se os números de mantissa não se cruzam no eixo real, então adição e subtração entre esses números são impossíveis. Por exemplo, tomamos o número de Single: 47FFFFFF 131071,9921875 (dec) No sistema binário, este número se parece com: 11111111111111111,1111111 Mostramos algumas operações de computador de adição, e esse número no formato de dígitos únicos significativos no Mantisa do número binário no formato de Único, não mais do que 24 Vermelho indica os números além deste limite e não estão envolvidos no formato Único 1. adição com o mesmo número (o deslocamento de erro 0.0). 2. adição ao número de menor de 2 vezes (deslocamento de erro - 0,00390625). 3. adição com um número menor de 2 23 vezes (desvio de erro - 0,007812). 4. adição com um número menor de 2 24 vezes (desvio de erro - 0,007812). Neste último caso, a mantissa dos números se separa, e as operações aritméticas com estes números são sem sentido. Como pode ser visto a partir dos exemplos acima, o erro de deslocamento ocorre se os números normalizados iniciais forem expoentes diferentes. Se os números diferirem em mais de 2 23 (para simples) e 2 52 (para o dobro), então adição e subtração entre estes números não são possíveis. O resultado de erro relativo máximo da operação é de cerca de 5,96 e-6, que não excede um erro relativo de representação do número (p.9.1). Embora o erro relativo aqui esteja tudo bem, existem outros problemas. Primeiro, trabalhe com números apenas em uma estreita faixa do eixo real, onde a mantissa se cruzam. Em segundo lugar, para cada fonte do limite de um ciclo chamado buraco cíclico. Deixe-me explicar, se houver um ciclo em que o número original é adicionado à soma, há um limite numérico na quantidade para este número. Ou seja, o valor que atinge um certo tamanho deixa de aumentar adicionando-o ao número original. Aqui está um exemplo de furos cíclicos no sistema de controle automático: Existe uma fábrica farmacêutica produzindo comprimidos pesando 10 mg. Composto por: máquina de formação, tanque de armazenamento de 500 kg, máquinas de embalagem, sistema de controle automático. A máquina de moldagem alimenta o bunker em 10 comprimidos por vez. A máquina de enchimento toma um comprimido. O sistema de controlo automático leva em consideração os comprimidos recebidos na tremonha da máquina de moldagem e retirados das máquinas de embalagem de bunker. Ou seja, existe um programa que mostra a produção de funil de enchimento em kg. Quando no bunker haverá mais de 500 kg de moldes de máquina de moldagem de produtos em uma pausa, ele inclui o código no bunker será de 200 kg de produto. Máquina de enchimento para parar se o bunker for menos de 10 libras e começará quando o bunker estará sobre o produto de 100 quilogramas. Ambos os carros podem parar do tempo para servir, não dependentes uns dos outros (graças ao bunker). Aqui está um exemplo de furos cíclicos no sistema de controle automático: Existe uma fábrica farmacêutica produzindo comprimidos pesando 10 mg. Consistindo de: máquina de formação, tanque de armazenamento de 500 kg, máquinas de embalagem, como você sabe, ele funciona em um loop infinito. Suponha que um dia a máquina de enchimento estivesse por muito tempo e um bunker preenchido com até 300 kg. O que acontece depois de ligá-lo Um exemplo simplificado do gerenciamento do ciclo de programa: Neste exemplo, a máquina de enchimento pegou da tremonha 100 kg de produto eo peso dos produtos na tremonha não mudou. Por que não mudar Porque a mantisse 300 e 0,00001 formato disjuntivo único. Em seguida, leve o peso da tremonha da máquina de moldar a 500 kg e pare. A máquina de enchimento irá tirar todos os comprimidos da tremonha e também pára. O programa mostrará o peso de 500kg no bunker. Venha percorrendo especialistas, testando sensores, fios, computador e diga que o programa foi suspenso. Mas o programa não trava, ele continua funcionando sem problemas e cada verificação irá confirmar isso. Simplesmente o número de 0.0001 atingido no furo cíclico e emergir dele não pode. Como resultado, tivemos a sorte de ser uma fábrica farmacêutica, não a Sayan-Shushenskaya GES. Na verdade, um programador experiente nunca faria uma subtração cíclica (ou soma) dessa maneira. Este exemplo é propósito fictício, e por isso não pode ser considerado, embora em termos de matemática são todos perfeitamente. Este erro é típico de matemáticos e programadores novatos. Eu diria que o trabalho principal do programador é lutar com erros, mas não na solução matemática para o problema. Aqui está um exemplo de uma solução correta para este problema, cortesia de Sitkarevym Gregory: o exemplo anterior é retirado do pacote industrial real. Para maior clareza, simplificamos o exemplo acima. Conforme pode ser visto a partir deste exemplo, o programador tem que calcular o erro do resultado em cada ciclo, para explicá-lo no próximo ciclo. Observe que o programador deve estar absolutamente preparado para que alguns conceitos básicos de matemática não possam ser satisfeitos nos cálculos no formato IEEE754. Por exemplo, as regras da comutatividade algébrica (a b) a (a c) b, geralmente não são realizadas nesses cálculos. Infelizmente, na educação fundamental de hoje que está recebendo muito pouca atenção. 9.4 Erros devido ao arredondamento. Sujo zero. Quando os cálculos do computador podem distinguir dois tipos de arredondamento: 1. O resultado da operação aritmética é sempre arredondado. 2. Saída e entrada de um número real na caixa Windows é arredondado. No primeiro caso, a variável é arredondada para um dos 4 tipos de arredondamento IEEE754, o arredondamento padrão ocorre ao inteiro mais próximo. Neste caso, a variável recebe um novo valor arredondado. Na p.9.2 consideramos a adição de dois números idênticos: 1. Adição com o mesmo número (o desvio de erro 0.0). Aqui o resultado da adição de dois números é absolutamente preciso, mas o resultado foi arredondado por um microprocessador. Assim, o resultado exato foi adicionado ao erro de arredondamento. Em geral, o erro de arredondamento está dentro da precisão dos números. No segundo caso, a variável não muda seu significado, apenas na janela do Windows exibe o valor arredondado dos números reais. Acontece que a variável original e exibindo no Windows é um número diferente. Esta não é a culpa do formato IEEE754, este é um bug do Windows. A variável única é exibida nas figuras significativas do Windows 7 arredondadas para o número inteiro mais próximo. 3DFCD6EA 0,12345679104328155517578125 caixa é exibida como 0,1234568 Para variáveis ​​de tipo Double to a Windows caixa exibe 15 dígitos significativos arredondados para o número inteiro mais próximo. 3FBF9ADD3746F67D 0,12345678901234609370352046653351862914860248565673828125 exibido como ,123456789012346 A questão de como importante variável quando entramos na janela do Windows 0,123456789012346 Este valor será igual a este número: 3FBF9ADD3746F676 0,1234567890123459965590058118323213420808315277099609375 Ou seja, o valor de 3FBF9ADD3746F67D nós geralmente não podem inserir diretamente em O código do programa. Mas podemos enganar e colar no x 0.123456789012346 1 E-16. A variável resultante será igual a 3FBF9ADD3746F67D (isso é usado no exemplo de zero sujo) Display ou para um PC através da janela é um número impossível. Como resultado da ação surge Windows uma série de situações desagradáveis. 1. Você não tem capacidade técnica para exibir ou digitar os valores exatos. Das variáveis ​​nas janelas, o que em si é muito triste. 2. A emergência de erros graves, como o zero sujo. Zero sujo é quando você ou o programa assume que a variável não é igual a zero - zero Muitas vezes, esse erro ocorre na interface do operador da máquina. Por exemplo, depois de redefinir o peso dos programas de embalagem. O resultado do programa no exemplo acima Como resultado, uma variável que o operador considera zero - zero não é igual. O erro relativo do resultado é infinito. Nas operações de comparação lógica que não são zero, pode desviar a execução do programa para outro ramo do algoritmo. 9.5 Taxa de erro nos números normadenorma. O número de assassinos. Esses erros ocorrem ao trabalhar com números localizados na borda da representação de números desnormalizados normalizados. Eles estão associados a diferenças na representação de números no formato IEEE754 e transferem as fórmulas de diferença em números reais do formato IEEE754. Ou seja, o dispositivo (ou software) deve usar algoritmos diferentes dependendo da posição de um número real em um formato de linha de número. Além disso, leva a uma complicação de dispositivos e algoritmos, ainda há incertezas da zona de transição. A incerteza da zona de transição é que o padrão não define um valor específico do limite de transição. Em essência, o limite de transição é entre dois números reais: A última desnormalizado número 000FFFFFFFFFFFFF: valor decimal Accurate deste número: 2,2250738585072008890245868760858598876504231122409594654935248025624400092282356951787758888037591552642309780950 4343120858773871583572918219930202943792242235598198275012420417889695713117910822610439719796040004548973919380791 9893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181592 6642134996606517803095075913058719846423906068637102005108723282784678843631944515866135041223479014792369585208321 5976210663754016137365830441936037147783553066828345356340050740730401356029680463759185831631242245215992625464943 0083685186171942241764645513713542017221703137049658321015465406803539741790602258950302350193751977303094576317321 0852507299305089761582519159720757232455434770912461317493580281734466552734375e-308 e o primeiro número normalizado 0010000000000000: va decimais Accurate lue deste número: 2,2250738585072017830902327173324040642192159804623318305533274168872044348139181958542831590125110205640673397310 3581100515243416155346010885601238537771882113077799353200233047961014744258363607192156504694250373420837525080665 0616658158948720491179968591639648500635908770118304874799780887753749949451580451605050915399856582470818645113537 9358049921159810857660519924333521143523901487956996095912888916029926415110634663133936634775865130293717620473256 3178148566435087212282863764204484681140761391147706280168985324411002416144742161856716615054015428508471675290190 3161322778896729707373123334086988983175067838846926092773977972858659654941091369095406136467568702398678315290680 984617210924625396728515625e-308 Uma vez que o limite é um número real, sua precisão pode ser definido para o infinito e dispositivo digital ou programa pode não ter o bit para a decisão de incluir algum intervalo da número. Por exemplo, um bug 53632 para PHP, o que causou pânico no início de 2017, o que permitiu que o ltphp d 2.2250738585072017e-308 gt end ltbobygt lthtmlgt Digite um número 2.2250738585072017e-308 causou um atraso do processo com quase 100 CPU de carga. Outros números dessa gama de problemas não causados ​​(2.2250738585072009e-308, 2.2250738585072010e-308, 2.2250738585072017e-308) Relatar um bug recebido 30.12.2010, 10.01.2017 corrigido pelo desenvolvedor. Uma vez que o PHP é um pré-processador é usado pela maioria dos servidores, então qualquer rede de usuários dentro de 10 dias, foi capaz de fechar qualquer host. Como escrever os desenvolvedores que o bug só funciona em sistemas de 32 bits, mas se você aumentar a precisão do limite, então eu acho que os sistemas de 64 bits, também, pendurar (não verificado). A razão para o pânico é clara: qualquer usuário, com um certo nível de diligência e conhecimento, teve a oportunidade de reduzir a maioria dos recursos de informação do planeta dentro de dez dias. Eu não gostaria - resultaria em mais exemplos de tais números e tais erros. 10 A parte final A partir do acima é claro que a visão de que o resultado de ponto flutuante não está além do erro relativo ao informar o maior número é falso. Os erros listados no item 9 são adicionados em conjunto. Tais erros, como redução de zero suja e perigosa, podem tornar os erros de cálculo inaceitáveis. Atenção especial na programação de cálculos computacionais, o programador deve ser pago aos resultados perto de zero. Alguns especialistas acreditam que o formato dos números representa uma ameaça para a humanidade. Você pode ler sobre isso no artigo IEEE754-tick ameaça a humanidade Embora muitos dos fatos neste artigo sejam super-dramatizados e, possivelmente, sejam mal interpretados, mas o problema é o cálculo corretamente refletido filosoficamente. Não sou uma dramatização dos cálculos no padrão IEEE754. Padrão operacional desde 1985 e totalmente entrou no padrão IEEE754-2008, que ampliou a precisão dos cálculos. No entanto, o problema da computação de confiabilidade hoje é muito urgente, e as recomendações padrão do IEEE754-2008 e ISO não resolveram esse problema. Penso que nessa área precisava de uma ideia inovadora de que os desenvolvedores padrão IEEE754-2008, infelizmente, não possuem. As idéias inovadoras geralmente vêm. As principais idéias inovadoras em nosso mundo foram feitas por amadores (pessoas de mentalidade semelhante, não por dinheiro). Um exemplo impressionante desta situação foi a invenção do telefone. Quando uma professora Alexander Graham Bell (Alexander Graham Bell) apresentou uma patente para uma invenção do telefone para o presidente da empresa de telecomunicações Western Union Company, que é propriedade da conexão de cabo transatlântica com uma oferta para comprar sua patente para a Invenção do telefone, ele não foi expulso - não. O presidente daquela empresa ofereceu para considerar esta questão o conselho de especialistas no campo da telegrafia, composto por especialistas e estudiosos no campo das telecomunicações. Os especialistas deram a sua opinião de que esta invenção é inútil no campo das telecomunicações e é inútil. Alguns especialistas até escreveram um relatório que ele e seu sogro, decidiram independentemente promover sua invenção. Após cerca de 10 anos, o gigante das telecomunicações Western Union Co. foi virtualmente eliminado o negócio de telefonia da esfera das tecnologias de telecomunicações. Hoje, você pode ver em muitas janelas das cidades russas que dizem Western Union, esta empresa que se envolve na transferência de dinheiro ao redor do mundo e, uma vez que ela era a gigante internacional das telecomunicações. Podemos concluir: opiniões de especialistas em tecnologias inovadoras são inúteis Se você acha que desde a invenção do telefone (1877) na mente de pessoas que algo mudou, você está errado. Se os cientistas (que estão inventando novos) e profissionais (que sabem como usar o bem conhecido) não conseguem resolver o problema, você precisa de inovação. Links para novas idéias no campo da representação de números reais em hardware: 1. Approksimetika 2. Se você conhece outras idéias inovadoras no campo de representações de números reais, então teremos prazer em obter links para essas fontes. Eu sugeriria para representar números reais como ponto fixo. Para ver a gama completa de números Duplique o suficiente para ter uma variável consistindo de 1075 bits parte inteira e 1075 bits de parte fracionária, ou seja, cerca de 270 bytes por variável. Nesse caso, todos os números serão apresentados com a mesma precisão absoluta. Você pode trabalhar com números em toda a faixa do eixo real, ou seja, torna-se possível resumir grandes números de pequenos números. O número de passos no eixo real é uniforme, ou seja, o eixo real é linear. O tipo de dados será apenas um, ou seja, não precisará dos tipos inteiro, real e outros. Aqui, o problema é a realização de registros de dimensão dos microprocessadores de 270 bytes, mas não é um problema para a tecnologia moderna. Para escrever p.9 eu tive que criar um programa que representa um número como uma variável para um ponto fixo, long 1075.1075 bytes. Onde o número pode ser representado como uma seqüência de caracteres ASCII, ou seja, um símbolo é igual a um dígito. Só tive que escrever todas as operações aritméticas com strings ASCII. Este programa é semelhante a um cálculo em papel. Como o microprocessador de capacidade matemática nele não é usado, ela disse lentamente. Por que eu fiz isso eu não poderia encontrar um programa que poderia representar com precisão o número de formato IEEE754, em forma decimal. Eu também não encontrei o programa (embora certamente tenham o que não há dúvida), onde você pode inserir na caixa 1075 de dígitos decimais significativos. Aqui, por exemplo, apenas o valor decimal do número de double 7FEFFFFFFFFFFFFF: 17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955 863276687817154045895351438246423432132688946418276846754670353751698604991057655128207624 549009038932894407586850845513394230458323690322294816580855933212334827479782620414472316 8738177180919299881250404026184124858368,0 Você pode usar o v.1.0 nbsp IEEE754 para estudar e avaliar os erros quando se trabalha com números reais dadas no formato de IEEE754. Referências: 1. Padrão IEEE para Aritmética Binária de Ponto Flutuante. Copyright 1985 by The Institute of Electrical and Electronic Engineers, Inc 345 East 47th Street, Nova York, NY 10017, EUA Agradecimentos: Sitkarevu Grigory (sitkarevkomitex. ru, sinclair80gmail). Para obter assistência na criação de um artigo. Archive of reviews with comments nbsp View nbspnbsp (Send us feedback on the e-mail: infosoftelectro. ru )Binary Conversion Notes These notes include more information than is needed for MGF 1107. MGF 1107 students can ignore everything about binary fractions, the binary version of scientific notation, and hexadecimal numbers when reading what follows. Usamos apenas inteiros binários no MGF 1107. Conversão binária para decimal Isso é feito aplicando a definição dos valores de lugar para um número binário, avaliando cada um na base dez. Por exemplo, convertemos 1001 dois de binário para decimal da seguinte forma: que é 9 dez. A maioria das pessoas acham que esta é a conversão mais fácil das duas. As frações são tratadas com expoentes negativos para cada valor de lugar fracionário, assim como com números decimais, então convertemos 0.11 dois de binário para decimal, reconhecendo que dá 0.75 dez. O trabalho de casa MGF 1107 não inclui exemplos com frações binárias. Decimal para conversão binária A parte inteira é obtida (trabalhando da direita para a esquerda) pela divisão repetida por dois (que desloca o ponto binário para a esquerda), mantendo o restante como o próximo dígito binário e usando o quociente inteiro para a próxima etapa . Paramos quando o quociente é zero. (A maneira mais fácil de obter a parte inteira é usar o recurso de conversão Hex de uma calculadora e converter hexadecimal para binário, mas não estamos usando calculadoras nesta unidade.) A parte fracionada é obtida (agora trabalhando da esquerda para a direita) por Multiplicação repetida por dois (que desloca o ponto binário para a direita), mantendo a parte inteira como o próximo dígito binário e usando a parte fracionária para a próxima etapa. Não existem atalhos fáceis para a parte fracionária, mas preste atenção a qualquer padrão de repetição. Podemos escrever o resultado como um número binário de ponto flutuante normalizado com a convenção de que a mantissa (o significante) está entre 1 e 2 - isto é, a mantissa é da forma 1.ffffff. 1. Converter 11 dez para binário: O inteiro é convertido por e é 1011 dois. (Isto é 1.011 x 2 3 como um número de ponto flutuante normalizado.) 2. Converta 5,75 dez para binário: a parte inteira é encontrada por e é 101 dois. A parte fracionada é encontrada de modo que o número é 101.11 dois. (Isso é 1.0111 x 2 2 como um número de ponto flutuante normalizado.) 3. Converter 0,1 dez para binário: A parte fracionária é encontrada por assim que o número é 0.0001100110011. Dois (Isto é 1.10011001. X 2 -4 como um número de ponto flutuante normalizado.) Hexadecimal Números Decimal - Hexadecimal - Binary Table Caminho de volta na década de 1950, o ILLIAC foi construído na Universidade de Illinois (Urbana-Champaign) usando o sexadecimal Sistema de numeração. No entanto, eles contaram. 8, 9, K, S, N, J, F, L em vez de usar. 8, 9, A, B, C, D, E, F como fazemos hoje. Eles escolheram aquelas letras (que foram lembradas usando o mnemônico K ing Sized N úmeros J ust F ou L aughs), porque eles provaram ser os mais convenientes quando eles converteram um teletipo para ser usado para perfurar a fita de papel usada para IO. (Esta informação de J. Sutherland Frame, professor emérito de Matemática na Michigan State University, um programador inicial do clone 1957 do ILLIAC conhecido como MISTIC, ambos da família de computadores ORDVAC.) (An aside: Fans of 2001: A Space Odyssey lembrará que o computador HAL-9000 foi construído em Champaign-Urbana, o que reflete o papel histórico que a Univ. De Illinois teve no desenvolvimento inicial de computadores com a construção do ILLIAC. Além disso, embora todos conheçam Que a HAL é rot25 da IBM, o número de série reflete a seqüência usada pela Control Data, cujas máquinas da série 6000 foram o supercomputador em meados dos anos 60 quando 2001 foi feito. O Cray-1 seria uma máquina da série 8000, mas CDC escolheu O projeto Star que levou ao Cyber-205 e Cray formou sua própria empresa. Kubrick adivinhou sobre a direita ao colocar uma máquina da série 9000 que poderia falar no início dos anos 90 - HAL nasceu em 11292 - mas alguém esqueceu o mouse.) Este material É 169 Copyright 2000, by James Carr. Displaying IEEE Doubles in Binary Scientific Notation By Rick Regan emspJuly 1st, 2010 An IEEE double-precision floating-point number, or double, is a 64-bit encoding of a rational number. Internally, the 64 bits are broken into three fields: a 1-bit sign field, which represents positive or negative an 11-bit exponent field, which represents a power of two and a 52-bit fraction field, which represents the significant bits of the number. These three fields 8212 together with an implicit leading 1 bit 8212 represent a number in binary scientific notation, with 1 to 53 bits of precision. For example, consider the decimal number 33.75. It converts to a double with a sign field of 0, an exponent field of 10000000100, and a fraction field of 0000111000000000000000000000000000000000000000000000. The 0 in the sign field means it8217s a positive number (1 would mean it8217s negative). The value of 10000000100 in the exponent field, which equals 1028 in decimal, means the exponent of the power of two is 5 (the exponent field value is offset, or biased, by 1023). The fraction field, when prefixed with an implicit leading 1, represents the binary fraction 1.0000111. Written in normalized binary scientific notation 8212 following the convention that the fraction is written in binary and the power of two is written in decimal 8212 33.75 equals 1.0000111 x 2 5 . In this article, I8217ll show you the C function I wrote to display a double in normalized binary scientific notation. This function is useful, for example, when verifying that decimal to floating-point conversions are correctly rounded . Subnormal Numbers In double-precision floating-point, most numbers are represented in normalized form, with an implicit 1 bit giving 53 bits of precision. However, very small numbers 8212 the so-called subnormal numbers 8212 are represented in unnormalized form, with no implicit leading 1 bit and zero to 51 leading zeros of fraction field. These numbers are encoded with an exponent field of zero, with their true exponent equal to -1022 minus the location of the first 1 bit in their fraction field. This means that subnormal numbers are scaled by powers of two in the range 2 -1074 through 2 -1023. with accompanying precision of one to 52 bits. Although subnormal numbers are encoded as unnormalized, they can still be written as normalized. For example, the decimal number 1e-310 converts to a subnormal double with a sign field of 0, an exponent field of 00000000000, and a fraction field of 0000000100100110100010001011011100001110011000101011. This can be printed as 1.00100110100010001011011100001110011000101011 x 2 -1030 8212 which is what my C function does. I wrote a function called printdoublebinsci() that prints double-precision floating-point numbers in normalized binary scientific notation. It is based on a call to my function parsedouble(). which isolates the three fields of a double. I declared and defined this function in files I named binsci. h and binsci. c, respectively. Numbers that are not raised to a power are printed with the suffix ldquox 20rdquo. Not-a-number (NaN) and infinity values are not handled. Examples of Usage I wrote a program, called binsciTest. c, that shows some example calls to printdoublebinsci(): I compiled and ran it on both Windows and Linux: On Windows, I built a project in Visual C with files binsci. c, binsci. h, binsciTest. c, rawdouble. c, and rawdouble. h, and compiled and ran it in there. On Linux, I compiled with ldquogcc binsciTest. c binsci. c rawdouble. c - o binsciTestrdquo and then ran it with 8220.binsciTest8221. This is the Windows output (the Linux output is a little different Visual C and gcc differ in some of their decimal to floating-point conversions): Except for 33.75, which is exact, all the other examples are 53 significant bit approximations to the decimal numbers they stand in for (type lsquo0.1rsquo into my decimal to binary converter and see for yourself).

No comments:

Post a Comment