Friday 14 June 2019

Opções normalizadas de forma binária


Esta página é traduzida do original usando o tradutor do Google. IEEE 754 - Flutuação aritmética binária padrão Autor: Yashkardin Vladimirnbsp nbsp softelectro. ru nbsp nbsp 2009-2017 nbsp nbsp nbsp nbsp nbsp nbsp infooftelectro. 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 antiga designação da norma) Em 2008, a associação lançou IEEE padrão IEEE 754-2008, que incluiu o padrão IEEE 754-1985. 2. Breve descrição da norma. 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. Escopo 1.1 Objetivos de Implementação 1.2 Inclusões 1.3 Exclusões 2.Definições 3.Formatos 3.1 Conjuntos de Valores 3.2 Formatos Básicos 3.3 Formatos Estendidos 3.4 Combinações de Formatos 4.Rounding () 4.1 Round Para o mais próximo 4.2 Arredondamentos dirigidos 4.3 Arredondamento Precisão 5.Operations 5.1 Aritmética 5.2 Raiz quadrada 5.3 Conversão 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 de decimal binário 5.7 Comparação 6.Infinity, NaNs e Signed Zero 6.1 Aritmética Infinito 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 Excesso 7.4 Unde Rflow 7.5 Inexact 8.Traps 8.1 Trap Handler 8.2 Precedência A. Recommended Funções e Predicados nbsp nbsp nbsp nbspInfelizmente, o IEEE evoluiu de uma organização de engenharia pública internacional (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-bit Double-precision (double-precision) 64-bit With single (Precisão estendida única) 43 bits (raramente usado) Precisão de dupla extensão (precisão de dupla extensão) 79 bits (normalmente usa 80 bits) 3. Conceitos básicos na representação de números de ponto flutuante. 3.1 Submissão de uma forma exponencial normalizada. Considere, 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 de duas partes: uma mantissa M 1,55625 eo expoente exp 10 2 Se o 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 para a 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 convertendo números de IEEE 754. 4.1 A transformação de um número binário normalizado em formato de 32 bits IEEE 754 A aplicação principal em tecnologia e formatos de programação foram 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, nós fizemos esta conversão no número 155.625. Agora considere, como um número binário normalizado é convertido em um formato de 32 bits IEEE 754 Descrição da transformação em formato de 32 bits IEEE 754: O 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. Então vá exponente bits, 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 para o expoente em meio 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 mantissa binário normalizado é sempre 1, uma vez que o número está no intervalo 1 A tabela mostra o número decimal 155.625 no formato 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,2204460492503130808472633361816e-14 7.5 Informações gerais sobre o número de norma IEEE simples e dupla de precisão 754. Tabela 3. Informações sobre o formato 3264 bits no padrão ANSI IEEE Std 754-1985 número de comprimento, deslocamento de bit exponencial (E), bits O restante da mantissa (M), bits desnormalizados número binário normalizado número binário desnormalizado número de decimais F (-1) S 87292 (E -126) 8729 M2 23 F (-1) S 87292 (E -1022) 8729M2 52 normalizado Número de decimais 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. Erro denorms. Número Rel. Max. Erro normas. 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 Os números de arredondamento no padrão IEEE 754. Ao apresentar os números de ponto flutuante no IEEE Standard 754 têm freqüentemente 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. Arredondamento tende a zero. Arredondamento tende a 8734 Arredondamento tende a -8734 Tabela 3. Exemplos de arredondamento para uma casa decimal para o número inteiro mais próximo Como é arredondamento mostrado nos exemplos na Tabela 3. Quando você converte um número para escolher uma das formas de arredondamento. 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. 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. Linguagem de programação eo programador não pode mudar esta situação, um repouso de um número real no microprocessador não existe. 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 dobro 10 -14 Os erros absolutos podem ser significativos, como para o único 10 31 e para o duplo 10 292, que pode causar problemas com os cálculos. Se a contagem da amostra no papel, a resposta é 1. O erro absoluto é 7. Por que obtenha a resposta errada O número 123456789 no único 4CEB79A3hex (ieee) 123456792 (dezembro) o relatório de erro absoluto é 3 Número 123456788 no único 4CEB79A2hex (ieee) 123456784 (dec) erro absoluto é -4 Erro relativo nos números iniciais de aproximadamente 3,24 e-6 Como resultado, um erro relativo de operação do resultado foi 800, ou seja, aumentado em 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 de erro da representação do mais inócuo em cálculos de 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 Single: 4CEB79A3 123456792,0 (dec) Duplo: 419D6F34547E6B75 123456789,12345679104328155517578125 A diferença entre Single e Double quantidade: 2,87654320895671844482421875 Aqui está um exemplo para VB: 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 de 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 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 float (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. Nesse caso, podemos assumir que o compilador VC fornece automaticamente os tipos de variáveis ​​e a tentativa de trazer à força o mesmo tipo falha. Se a opção 1 (sem o elenco) para atender com variável de dupla-precisão (duplo), então o erro não vai trazer dados e Resultado 0,000000 Portanto, na maioria dos casos para se livrar dos dados de 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 selvagens como eles se relacionam com a ignorância dos padrões e da teoria da programação. 9.3 Erros causados ​​pela mudança da mantissa. Orifícios 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 este número no formato de dígitos únicos significativos no Mantissa do número binário no formato de Single não mais de 24 Red indica as figuras além deste limite e não estão envolvidas no formato Single 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 esses números não têm 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 certo, 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 há um ciclo em que o número original é adicionado à soma, há um limite numérico sobre a quantidade para este número. Ou seja, o montante que atinge um determinado 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. Consistindo de: máquina de formação, tanque de armazenamento de 500 kg, máquinas de embalagem, sistema de controle automático. Máquina de moldagem alimenta no bunker em 10 comprimidos de cada 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, há um programa que mostra a produção de funil de enchimento em kg. Quando no bunker será mais de 500 kg produto máquina de moldagem está em uma ruptura, que 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 de 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 uma máquina de enchimento de um dia esteja demasiado longa e um bunker encheu com até 300 quilogramas. 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 os números de mantissa 300 e 0,00001 disjunto formato único. Em seguida, leve o peso da tremonha da máquina de moldagem para 500 kg e pare. Máquina de enchimento tomará todos os comprimidos do funil e também pára. O programa mostrará o peso de 500kg no bunker. Venha especialistas correndo, testar sensores, fios, computador, e dizer que o programa pendurado. Mas o programa não trava, ele continua a funcionar sem problemas e cada verificação irá confirmar isso. Simplesmente o número de 0.0001 atingido no buraco 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. De fato, 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. Note que o programador deve estar absolutamente pronto para fazer alguns conceitos básicos de matemática não pode ser satisfeito nos cálculos em um formato IEEE754. Por exemplo, as regras de 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 predefinido ocorre para o número 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 exibi-la no Windows é um número diferente. Isso não é culpa do formato IEEE754, este é um bug do Windows. Uma única variável é exibida no Windows 7 números significativos arredondados 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 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 quando se trabalha com números localizados na borda da representação normalizada de números desnormalizados. 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, que causou pânico no início de 2017 lt htmlgt ltbodygt ltphp d 2.2250738585072017e-308 gt end ltbobygt lthtmlgt Digite um número 2.2250738585072017e-308 causou um bloqueio do processo com quase 100 CPU de carga. Outros números desta série de problemas não causados ​​(2.2250738585072009e-308, 2.2250738585072018e-308, 2.2250738585072017e-308) Reportar um erro recebido 30.12.2018, 10.01.2017 fixado pelo colaborador. 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 Do acima é claro que a visão de que o resultado de ponto flutuante não está além do erro relativo em relatar o maior número é falso. Erros listados no item 9 são adicionados juntos. Tais erros, como a 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 de computador o programador deve ser pago para os 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 sobre dramatizado, e possivelmente mal interpretado, mas o problema é a computação corretamente refletida filosoficamente. Não sou uma dramatização dos cálculos do padrão IEEE754. Standard operando desde 1985 e totalmente entrou no padrão IEEE754-2008, que ampliou a precisão dos cálculos. No entanto, o problema da confiabilidade computação hoje é muito urgente, e as recomendações padrão IEEE754-2008 e ISO não resolveram este problema. Eu acho que nesta área necessária uma idéia inovadora que desenvolvedores padrão IEEE754-2008 infelizmente não possuem. Ideias inovadoras geralmente vêm de. As principais idéias inovadoras em nosso mundo foram feitas por amadores (pessoas de mentalidade semelhante não por dinheiro). Um exemplo notável dessa situação foi a invenção do telefone. Quando um professor Alexander Graham Bell (Alexander Graham Bell) veio com uma patente para uma invenção do telefone ao presidente da empresa de telecomunicações Western Union Company, que é propriedade da conexão de cabo transatlântico com uma oferta para comprar sua patente para o Invenção do telefone, ele não foi expulso - não. O presidente daquela empresa ofereceu-se para considerar esta questão o conselho de especialistas na área de telegrafia, composto por especialistas e acadêmicos no campo das telecomunicações. Os peritos deram a sua opinião que esta invenção é inútil no campo das telecomunicações e é fútil. Alguns especialistas até escreveram um relatório que ele e seu sogro, decidiram independentemente promover sua invenção. Depois de cerca de 10 anos, o gigante das telecomunicações Western Union Co. foi praticamente eliminado negócios de telefone da esfera das tecnologias de telecomunicações. Hoje você pode ver em muitas cidades russas janelas que diz Western Union, esta empresa que está envolvida na transferência de dinheiro em todo o mundo, e uma vez que ela era o gigante das telecomunicações internacionais. 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 usar o bem conhecido) não podem 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. Neste 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. Números de passo no eixo real é uniforme, que é o eixo real é linear. O tipo de dados será apenas um, ou seja, não precisa do todo, real e outros tipos. Aqui o problema é a realização de registros de microprocessadores dimensão 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. Basta escrever todas as operações aritméticas com strings ASCII. Este programa é semelhante a um cálculo em papel. Desde microprocessador capacidade matemática nele não são usados, 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 encontrar o programa (embora eles certamente têm o que sem dúvida), onde você pode entrar 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 pelo Instituto de Engenheiros Elétricos e Eletrônicos, Inc 345 East 47th Street, Nova Iorque, NY 10017, EUA Agradecimentos: Sitkarevu Grigory (sitkarevkomitex. ru, sinclair80gmail). Para obter ajuda na criação de um artigo. Arquivo de comentários com comentários nbsp Ver nbspnbsp (Envie-nos comentários sobre o e-mail: infosoftelectro. ru) Como representar 0,148 2 em aritmética de ponto flutuante normalizado com o formato (0,148) (0,00100101111.) 2 Nós mudamos 3 bits para a esquerda Para torná-lo normalizado (1.00101111) 2 2. Exponente 1164 (75) (1001011) 2 e Mantissa (01001111) 2. Assim, a representação de ponto flutuante é (0100101100101111) 2 (4B2F) Representação A Mas se armazenamos a mantissa desnormalizada em um registro de 8 bits, então ela não armazenará os últimos três 1s e então a mantissa teria normalizado de (0,00100101) 2 para (1,00101000 ) 2 inserindo 3 0s em vez de 1s. The representation would have been (0100101100101000)2 (4B28) Representation B So while normalizing, does the processor takes into account the denormalized mantissa bits beyond 8 bits too Or just rounds it off Which one is correct: A or B Does it store the mantissa in fixed point representation How does it all workBinary 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 acha que esta é a mais fácil das duas conversões. 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. A lição de casa do 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 fracionária é 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. (Isso é 1.011 x 2 3 como um número de ponto flutuante normalizado.) 2. Converter 5.75 dez para binário: A parte inteira é encontrada por e é 101 dois. A parte fracionária é encontrada assim 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 de 1957 do ILLIAC conhecido como MISTIC, ambos na família de computadores ORDVAC.) (An aside: Fans of 2001: Uma Odisséia no Espaço recordará 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. Que a HAL é rot25 da IBM, o número de série reflete a seqüência usada por Control Data, cujas máquinas da série 6000 eram o supercomputador em meados dos anos 60, quando o ano de 2001. O Cray-1 teria sido uma máquina da série 8000, mas os CDC escolheram O projeto Star que levou ao Cyber-205 e Cray formou sua própria empresa. Kubrick adivinhou sobre o direito de 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, de James Carr.

No comments:

Post a Comment