Thursday, 19 October 2017

Opções De Ponto Flutuante Mantissa Exponente Binário


Representação de ponto flutuante IEEE Neste artigo, o Microsoft Visual C é consistente com os padrões numéricos IEEE. Existem três variedades internas de números reais. Real4 e real8 são usados ​​no Visual C. Real4 é declarado usando a palavra float. Real8 é declarado usando a palavra duplo. Na programação de 32 bits do Windows, o tipo de dados duplo longo mapeia para duplicar. No entanto, há suporte a linguagem assembly para computações usando o tipo de dados real10. Os valores são armazenados da seguinte forma: S representa o bit de sinal, os X 39s são os bits de expoente, e os M 39s são os bits de mantissa. Observe que o bit mais à esquerda é assumido em formatos real 4 e real 8, mas está presente como quot1quot em BYTE 3 do formato real10. Para mudar o ponto binário corretamente, você primeiro se abaixa o expoente e, em seguida, move o ponto binário para a direita ou para a esquerda, o número apropriado de bits. A seguir estão alguns exemplos no formato real4: No exemplo a seguir, o bit de sinal é zero eo expoente armazenado é 128 ou 100 0000 0 em binário, que é 127 mais 1. A mantissa armazenada é (1.) 000 0000 0000 0000, que tem um ponto 1 implícito e ponto binário, então a mantissa real é um. O mesmo que 2, exceto que o bit de sinal está definido. Isso é verdadeiro para todos os números de ponto flutuante do formato IEEE. A mesma mantissa, o expoente aumenta em um (o valor tendencioso é de 129 ou 100 0000 1 em binário. O mesmo expoente, a mantisa é maior à metade de it39s (1.) 100 0000. 0000 0000, que, uma vez que esta é uma fração binária, é 1 O mesmo expoente que outras potências de dois, mantissa é um menos de dois em 127, ou 011 1111 1 em binário. O expoente polarizado é 126, 011 1111 0 em binário e a mantissa é (1.) 100 0000. 0000 0000, que é 12 12. Exatamente o mesmo que dois, exceto que o bit que representa 14 é definido na mantissa 110 é uma fração de repetição em binário A mantissa é apenas tímida de 1,6, eo expoente polarizado diz que 1,6 é para ser dividido por 16 (é 011 1101 1 em binário, que é 123 em decimal.) O verdadeiro expoente é 123 127 4, o que significa que o Factor de multiplicação é 24 116. Note-se que a mantissa armazenada é arredondada para cima no último bit uma tentativa de representar o número irrepresentável tão precisamente quanto possível. (O motivo pelo qual 110 e 1100 não são exatamente representáveis ​​em binário é semelhante à razão que 13 não é exatamente representável em decimal.) 0 1.0 2-128 todos os zeros - um caso especial.3.10.1. O ponto flutuante básico é Em torno das limitações do ponto fixo usando um formato semelhante à notação científica. Um número de notação científica, como você provavelmente sabe, consiste em uma mantissa (3.52 no exemplo acima) uma raiz (sempre 10), e um expoente (3 no exemplo acima). Portanto, o formato geral de um valor de notação científica é: mantissa x radix expoente A forma normalizada sempre tem uma mantissa maior ou igual a 1,0 e menor que 10,0. Podemos desnormalizar o valor e expressá-lo de muitas outras maneiras, como 35.2 x 10 2. ou 0.00325 x 10 0. Para cada posição, deslocamos os dígitos da mantisa em relação ao ponto decimal, aumentamos ou diminuímos o valor da Mantissa por um fator de 10. Para compensar isso, simplesmente aumentamos ou diminuímos o expoente em 1. A desnormalização é necessária ao adicionar valores de notação científica: também é necessário ajustar a mantisse e o expoente para normalizar os resultados. Por exemplo, 9.9 x 10 2 9.9 x 10 2 é 19.8 x 10 2. que deve ser normalizado para 1.98 x 10 3. Um sistema flutuante binário armazena uma mantissa binária assinada e um expoente binário assinado, e geralmente usa uma base de 2. Usando uma base de 2 (ou qualquer poder de 2) nos permite normalizar e desmoralizar, deslocando os dígitos binários na mantisa e ajustando o expoente inteiro na raiz de 2. (Deslocando dígitos binários na mantisa n bits para a esquerda ou Direita multiplica ou divide a mantissa por 2 n.) 00010 2 x 2 3 01000 2 x 2 1. Os formatos de ponto flutuante padrão são definidos pela sociedade IEEE. Os formatos IEEE são ligeiramente mais complexos que necessários para compreender o ponto flutuante em geral, por isso vamos começar com um exemplo mais simples aqui. 3.10.2. Formato de ponto flutuante simples. Suponha que um formato de ponto flutuante de 32 bits tenha uma mantisa de complemento de dois bits de 24 bits, um expoente de complemento de dois bits de 8 bits e uma base de 2. A estrutura geral é: expoente Mantissa x 2 Onde Mantissa é um número inteiro de complemento de 24 bits e o expoente é um número inteiro de complemento de dois bits de 8 bits. O formato binário é o seguinte: Tabela 3.3.Floating Point Format Qual é o valor do número a seguir. A mantissa é 000000000000000000010010 ou (2 16) 18. O expoente é 11111100 - (00000011 1) -00000100 -4. O valor é, portanto, 18 x 2 -4 Qual é o maior valor positivo que podemos representar neste sistema O maior valor positivo será composto pela maior mantissa positiva eo maior expoente positivo. A mantissa maior é 011111111111111111111111, que em dois complemento é 2 23-1 (8388607). O maior exponente é 01111111, que em dois complementos é 2 7 -1 (127). Portanto, o maior valor positivo é 8388607 x 2 127 1,42 x 10 45. Qual é o segundo maior valor positivo Qual a diferença entre o maior e o segundo maior O que é o menor valor positivo Para encontrar o menor valor positivo na forma Mantissa x Exponente de radix. Escolhemos a menor mantissa positiva eo menor expoente negativo (o expoente negativo com a maior magnitude). Uma vez que a mantissa é um número inteiro, o menor valor positivo possível é 1. Uma vez que o expoente é um valor de complemento de dois bits de 8 bits, o menor expoente negativo é 10000000 2. De -2 7 -128. Assim, o menor valor positivo é 1 x 2 -128. Ou 2,93873587706 x 10 -39. Qual é o segundo menor valor positivo Qual é a diferença entre o menor eo segundo menor Representar -2.75 neste sistema de ponto flutuante. Converter o número para o binário de ponto fixo usando os métodos descritos nas seções anteriores: Multiplicar por radix expoente igual a 1: Shift O ponto binário para fazer a mantissa um número inteiro: - (1011 2) Movendo o ponto binário dois lugares para a direita, multiplicamos a mantissa por 2 2. Portanto, devemos dividir (radix expoente) pelo mesmo fator: Mantissa e expoente nos formatos especificados (dois complementos neste caso): Mantissa: - (000000000000000000001011) 111111111111111111110101 Exponente: -2 10 11111110 Representação binária 11111111111111111111010111111110 Quantos valores diferentes este sistema pode representar 3.10.3.Overflow e Underflow Overflow ocorre quando o O resultado de uma operação de ponto flutuante é maior do que o maior valor positivo, ou menor do que o menor valor negativo. Em outras palavras, a magnitude é muito grande para representar. Subfluxo ocorre quando o resultado de uma operação de ponto flutuante é menor que o menor valor positivo ou maior que o maior valor negativo. Em outras palavras, a magnitude é muito pequena para representar. O exemplo do formato de 32 bits acima não pode representar valores maiores que cerca de 10 45 ou menores do que cerca de 10 -39. Uma técnica para evitar transbordamentos e debilidades é alternar as operações que aumentam e diminuem os resultados intermediários. Em vez de fazer todas as multiplicações em primeiro lugar, o que poderia causar transbordamento, ou todas as divisões em primeiro lugar, o que poderia causar subfluência, poderíamos alternar multiplicações e divisões para moderar os resultados ao longo do caminho. Técnicas como estas devem ser freqüentemente usadas em cálculos científicos complexos. 3.10.4.Custo de ponto flutuante Tudo tem um custo. O aumento da faixa e capacidade de representar números não-inteiros não é exceção. Existem apenas 2 32 padrões de 32 0s e 1s. Portanto, existem apenas 32 32 números únicos que podemos representar em 32 bits, independentemente do formato. Então, como é que podemos representar números até 10 45. Obviamente, devemos sacrificar algo intermediário. O ponto flutuante para nós está espalhado pelo número limitado de padrões binários disponíveis para cobrir uma maior variedade de números. Quanto maior o expoente, maior o intervalo entre números consecutivos que podemos representar com precisão. Perto de 0, podemos representar muitos números em um pequeno intervalo. Longe de zero, haverá toda uma gama de números inteiros que não podem ser representados. A precisão de um valor de ponto flutuante de 32 bits é menor do que a precisão de um inteiro de 32 bits. Usando 8 bits para o expoente, sacrificamos esses 8 bits de precisão. Assim, nosso formato de exemplo tem a mesma precisão que um sistema de 24 bits assinado inteiro. Desempenho Aritmética em ponto flutuante é várias vezes mais lento do que em inteiros. Esta é uma propriedade inerente do formato. Considere o processo de adicionar dois valores de notação científica. Equaliza os expoentes Adicione as mantisas Normalize o resultado Cada uma dessas operações leva aproximadamente a mesma quantidade de tempo em um computador como uma adição de número inteiro único. Uma vez que o ponto flutuante é armazenado como notação científica, podemos esperar que a adição de ponto flutuante demore cerca de três vezes, desde a adição de números inteiros. Na realidade, um PC típico leva cerca de 2,5 vezes mais tempo para executar uma instrução aritmética de ponto flutuante, pois faz para fazer a mesma instrução inteira. Observe que isso se aplica apenas às operações que podem ser realizadas usando uma única instrução inteira ou uma única instrução de ponto flutuante. Por exemplo, suponha que um programa esteja sendo executado em um computador de 32 bits e não há como representar os dados dentro do intervalo de um inteiro de 32 bits. Neste caso, serão necessárias várias instruções inteiras para processar valores inteiros de mais de 32 bits, e a vantagem de velocidade dos inteiros não se aplica. Também é possível em alguns sistemas que as operações de ponto flutuante e inteiro possam ocorrer ao mesmo tempo e, portanto, utilizar o hardware de ponto flutuante pode resultar em melhor desempenho do que executar operações de inteiro inteiro enquanto a unidade de ponto flutuante fica ociosa. Este é o caso da renderização de gráficos que ocorre usando o ponto flutuante na unidade de processamento de gráficos (GPU) em vez da CPU. Não faz sentido mover os cálculos de renderização para a CPU, a fim de usar números inteiros, pois isso só aumentaria a carga de trabalho para a CPU e permitiria que a energia da GPU fosse desperdiçada. Se o hardware tiver suporte de ponto flutuante incorporado, as operações comuns, como a adição de ponto flutuante, subtração, etc. podem ser tratadas por uma única instrução. Se o hardware não tiver uma unidade de ponto flutuante (comum em processadores embutidos), as operações de ponto flutuante devem ser tratadas por rotinas de software. Portanto, adicionar dois valores de ponto flutuante exigirá dezenas de instruções para completar em vez de apenas um. Estas serão centenas de vezes mais lentas do que inteiros, e consumirão um grande pedaço da memória do programa disponível. A maioria dos algoritmos pode ser implementada usando inteiros com pouco pensamento. O uso de ponto flutuante é muitas vezes o resultado de pura preguiça. Não use ponto flutuante apenas porque é intuitivo. Mais consumo de energia. As CPUs conseguem seu consumo máximo de energia ao fazer cálculos intensivos em ponto flutuante. Isso geralmente não é visível em um PC desktop, mas pode se tornar um problema em grades grandes que consistem em centenas de PCs, uma vez que a rede elétrica a que estão conectados pode não ser projetada para fornecer seu máximo desenho. Também pode ser um problema ao executar um laptop na bateria enquanto faz cálculos intensivos. A vida útil da bateria enquanto faz cálculos intensivos em ponto flutuante pode ser uma pequena fração do que é ao ler e-mails, navegar na web ou editar um documento no conversor OpenOffice. Decimal to Floating-Point Sobre o Conversor Decimal para Flutuante Este é uma decimal Para o conversor binário de ponto flutuante. Ele converterá um número decimal para o número de ponto flutuante binário IEEE 754 de precisão simples e de dupla precisão, usando arredondamento redondo-para-igual (o modo de arredondamento IEEE padrão). É implementado com aritmética de precisão arbitrária, então suas conversões estão corretamente arredondadas. Ele irá converter números normais e subnormais, e converterá os números que transbordam (para o infinito) ou sub-fluxo (para zero). O número de ponto flutuante resultante pode ser exibido em dez formas: em decimal, em binário, em notação científica decimal normalizada, em notação científica binária normalizada, como uma decimal normalizada vezes uma potência de dois, como um inteiro decimal vezes um poder de dois , Como um inteiro decimal vezes uma potência de dez, como uma constante de ponto flutuante hexadecimal, em binário bruto e em hexadecimal bruto. Cada formulário representa o valor exato do número de ponto flutuante. Por que usar este conversor Este conversor irá mostrar-lhe por que números em seus programas de computador, como 0.1, não se comportam como você espera. Dentro do computador, a maioria dos números com um ponto decimal só pode ser aproximado de outro número, apenas um pouco longe do que você deseja, deve suportar isso. Por exemplo, em ponto flutuante de precisão única, 0,1 torna-se 0.100000001490116119384765625. Se o seu programa estiver a imprimir 0.1, está mentindo para você se estiver a imprimir 0.100000001, it8217s ainda está mentindo, mas pelo menos você está dizendo que você realmente não tem 0.1. Como usar este conversor Digite um número positivo ou negativo, seja no formulário padrão (por exemplo, 134.45) ou expoente (por exemplo, 1.3445e2). Indique valores fracionários com um ponto decimal (lsquo. rsquo) e não utilize vírgulas. Essencialmente, você pode digitar o que um programa de computador aceita como um literal de ponto flutuante, exceto sem qualquer sufixo (como lsquofrsquo). Verifique as caixas para a precisão IEEE que deseja escolher Duplo. Solteiro . ou ambos. (O duplo é o padrão.) O dobro significa que um significand de 53 bits (menos se subnormal) com um expoente de 11 bits. Único significa um significand de 24 bits (menos se subnormal) com um expoente de 8 bits. Verifique as caixas para qualquer formato de saída que você deseja escolher um ou todos os dez. (O decimal é o padrão.) Clique em lsquoConvertrsquo para converter. Clique em lsquoClearrsquo para redefinir o formulário e começar do zero. Se você quiser converter outro número, basta digitar sobre o número original e clicar em lsquoConvertrsquo 8212 não é necessário clicar em lsquoClearrsquo primeiro. Existem dez formas de saída para escolher: Decimal. Exibir o número de ponto flutuante em decimal. (Expandir caixa de saída, se necessário, para ver todos os dígitos.) Binário. Exibir o número de ponto flutuante em binário. (Expandir caixa de saída, se necessário, para ver todos os dígitos.) Notação científica decimal normalizada. Exibir o número de ponto flutuante em decimal, mas de forma compacta, usando notação científica normalizada. (Expandir caixa de saída, se necessário, para ver todos os dígitos.) Notação científica binária normalizada. Exibe o número de ponto flutuante em binário, mas de forma compacta, usando notação científica binária normalizada. Nota . Os números subnormal são mostrados normalizados, com seu expoente real. Temporais decimais normalizados uma potência de dois. Exibir o número de ponto flutuante em uma notação científica normalizada híbrida, como um número decimal normalizado vezes um poder de dois. Inteiro decimal vezes uma potência de dois. Exibe o número de ponto flutuante como um número inteiro decimal com uma potência de dois. (A representação binária do inteiro decimal é o padrão de bits da representação de ponto flutuante, menos zeros à direita). Essa forma é mais interessante para expoentes negativos, pois representa o número de ponto flutuante como uma fração diádica. Inteiro decimal vezes um poder de dez. Exibir o número de ponto flutuante como um número inteiro decimal com uma potência de dez. Esta forma é mais interessante para os expoentes negativos, pois representa o número de ponto flutuante como uma fração. (Expandir caixa de saída, se necessário, para ver todos os dígitos.) Constante hexagonal de ponto flutuante. Exibir o número de ponto flutuante como uma constante de ponto flutuante hexadecimal. Nota . Há muitas maneiras de formatar constantes hexadecimais de ponto flutuante, como você veria se, por exemplo, você comparou a saída dos programas Java, Visual C, gcc C e Python. As diferenças em várias línguas são superficiais, porém 8212 zeros à esquerda podem ou não ser exibidos, os expoentes positivos podem ou não ter um sinal de mais, etc. Este conversor converte as constantes sem zeros à direita e sem sinais de mais. Nota . Como muitas linguagens de programação, esse conversor mostra números subnormais não normalizados, com seus expoentes definidos para o mínimo exponente normal. Nota . O último dígito hexadecimal em uma constante de ponto flutuante hexadecimal pode ter o binário 0s de trânsito dentro deste doesn8217t implica necessariamente que esses bits existem no formato IEEE selecionado. Raw binário. Exibe o número de ponto flutuante em seu formato IEEE bruto (bit de sinal seguido pelo campo exponente seguido pelo campo significand). Raw hexadecimal. Exibe o número de ponto flutuante em seu formato IEEE bruto, equivalente ao formato binário bruto, mas expresso de forma compacta em hexadecimal. (Veja aqui para obter mais detalhes sobre esses formulários de saída.) Existem duas bandeiras de saída: Inexact. Se for verificado, isso mostra que a conversão foi inexata, é que ele deve ser arredondado para uma aproximação do número de entrada. (A conversão é inexata quando a saída decimal não corresponde à entrada decimal, mas esta é uma maneira mais rápida de contar). Nota. Este conversor sinaliza o transbordamento para o infinito e sub-fluxo para zero como inexato. Subnormal. Se marcado, isso mostra que o número era muito pequeno e convertido com menos de precisão total (a precisão real é mostrada entre parênteses). Implementação Eu escrevi este conversor a partir do zero 8212 ele não confia em funções de conversão nativas como strtod () ou strtof () ou printf (). Baseia-se no algoritmo baseado em inteiro grande que descrevo no meu artigo ldquoCorrect Decimal A Ponto Flutuante Usando Big Integers rdquo. I8217ve implementado usando o BCMath. Por razões práticas, configurei um limite arbitrário (um pouco) no comprimento da entrada decimal. Você obtém uma mensagem de erro se você clicar nela. Isso irá filtrar as entradas que, de outra forma, transbordariam para o infinito ou o subfluível para zero, mas também o impedirá de entrar em alguns casos de arredondamento intermediário de ldquohardrdquo. (Para o registro, porém, este conversor aceita todos os exemplos difíceis que I8217ve discutimos no meu site.) Para todas as entradas aceitas no entanto, a saída está correta (apesar de todos os erros que escapam meus testes extensivos). Conversor decimal ao conversor flutuante sobre o Conversor decimal para ponto flutuante Este é um conversor de ponto flutuante decimal para binário. Ele converterá um número decimal para o número de ponto flutuante binário IEEE 754 de precisão simples e de dupla precisão, usando arredondamento redondo-para-igual (o modo de arredondamento IEEE padrão). É implementado com aritmética de precisão arbitrária, então suas conversões estão corretamente arredondadas. Ele irá converter números normais e subnormais, e converterá os números que transbordam (para o infinito) ou sub-fluxo (para zero). O número de ponto flutuante resultante pode ser exibido em dez formas: em decimal, em binário, em notação científica decimal normalizada, em notação científica binária normalizada, como uma decimal normalizada vezes uma potência de dois, como um inteiro decimal vezes um poder de dois , Como um inteiro decimal vezes uma potência de dez, como uma constante de ponto flutuante hexadecimal, em binário bruto e em hexadecimal bruto. Cada formulário representa o valor exato do número de ponto flutuante. Por que usar este conversor Este conversor irá mostrar-lhe por que números em seus programas de computador, como 0.1, não se comportam como você espera. Dentro do computador, a maioria dos números com um ponto decimal só pode ser aproximado de outro número, apenas um pouco longe do que você deseja, deve suportar isso. Por exemplo, em ponto flutuante de precisão única, 0,1 torna-se 0.100000001490116119384765625. Se o seu programa estiver a imprimir 0.1, está mentindo para você se estiver a imprimir 0.100000001, it8217s ainda está mentindo, mas pelo menos você está dizendo que você realmente não tem 0.1. Como usar este conversor Digite um número positivo ou negativo, seja no formulário padrão (por exemplo, 134.45) ou expoente (por exemplo, 1.3445e2). Indique valores fracionários com um ponto decimal (lsquo. rsquo) e não utilize vírgulas. Essencialmente, você pode digitar o que um programa de computador aceita como um literal de ponto flutuante, exceto sem qualquer sufixo (como lsquofrsquo). Verifique as caixas para a precisão IEEE que deseja escolher Duplo. Solteiro . ou ambos. (O duplo é o padrão.) O dobro significa que um significand de 53 bits (menos se subnormal) com um expoente de 11 bits. Único significa um significand de 24 bits (menos se subnormal) com um expoente de 8 bits. Verifique as caixas para qualquer formato de saída que você deseja escolher um ou todos os dez. (O decimal é o padrão.) Clique em lsquoConvertrsquo para converter. Clique em lsquoClearrsquo para redefinir o formulário e começar do zero. Se você quiser converter outro número, basta digitar sobre o número original e clicar em lsquoConvertrsquo 8212 não é necessário clicar em lsquoClearrsquo primeiro. Existem dez formas de saída para escolher: Decimal. Exibir o número de ponto flutuante em decimal. (Expandir caixa de saída, se necessário, para ver todos os dígitos.) Binário. Exibir o número de ponto flutuante em binário. (Expandir caixa de saída, se necessário, para ver todos os dígitos.) Notação científica decimal normalizada. Exibir o número de ponto flutuante em decimal, mas de forma compacta, usando notação científica normalizada. (Expandir caixa de saída, se necessário, para ver todos os dígitos.) Notação científica binária normalizada. Exibe o número de ponto flutuante em binário, mas de forma compacta, usando notação científica binária normalizada. Nota . Os números subnormal são mostrados normalizados, com seu expoente real. Temporais decimais normalizados uma potência de dois. Exibir o número de ponto flutuante em uma notação científica normalizada híbrida, como um número decimal normalizado vezes um poder de dois. Inteiro decimal vezes uma potência de dois. Exibe o número de ponto flutuante como um número inteiro decimal com uma potência de dois. (A representação binária do inteiro decimal é o padrão de bits da representação de ponto flutuante, menos zeros à direita). Essa forma é mais interessante para expoentes negativos, pois representa o número de ponto flutuante como uma fração diádica. Inteiro decimal vezes um poder de dez. Exibir o número de ponto flutuante como um número inteiro decimal com uma potência de dez. Esta forma é mais interessante para os expoentes negativos, pois representa o número de ponto flutuante como uma fração. (Expandir caixa de saída, se necessário, para ver todos os dígitos.) Constante hexagonal de ponto flutuante. Exibir o número de ponto flutuante como uma constante de ponto flutuante hexadecimal. Nota . Há muitas maneiras de formatar constantes hexadecimais de ponto flutuante, como você veria se, por exemplo, você comparou a saída dos programas Java, Visual C, gcc C e Python. As diferenças em várias línguas são superficiais, porém 8212 zeros à esquerda podem ou não ser exibidos, os expoentes positivos podem ou não ter um sinal de mais, etc. Este conversor converte as constantes sem zeros à direita e sem sinais de mais. Nota . Como muitas linguagens de programação, esse conversor mostra números subnormais não normalizados, com seus expoentes definidos para o mínimo exponente normal. Nota . O último dígito hexadecimal em uma constante de ponto flutuante hexadecimal pode ter o binário 0s de trânsito dentro deste doesn8217t implica necessariamente que esses bits existem no formato IEEE selecionado. Raw binário. Exibe o número de ponto flutuante em seu formato IEEE bruto (bit de sinal seguido pelo campo exponente seguido pelo campo significand). Raw hexadecimal. Exibe o número de ponto flutuante em seu formato IEEE bruto, equivalente ao formato binário bruto, mas expresso de forma compacta em hexadecimal. (Veja aqui para obter mais detalhes sobre esses formulários de saída.) Existem duas bandeiras de saída: Inexact. Se for verificado, isso mostra que a conversão foi inexata, é que ele deve ser arredondado para uma aproximação do número de entrada. (A conversão é inexata quando a saída decimal não corresponde à entrada decimal, mas esta é uma maneira mais rápida de contar). Nota. Este conversor sinaliza o transbordamento para o infinito e sub-fluxo para zero como inexato. Subnormal. Se marcado, isso mostra que o número era muito pequeno e convertido com menos de precisão total (a precisão real é mostrada entre parênteses). Implementação Eu escrevi este conversor a partir do zero 8212 ele não confia em funções de conversão nativas como strtod () ou strtof () ou printf (). Baseia-se no algoritmo baseado em inteiro grande que descrevo no meu artigo ldquoCorrect Decimal A Ponto Flutuante Usando Big Integers rdquo. I8217ve implementado usando o BCMath. Por razões práticas, configurei um limite arbitrário (um pouco) no comprimento da entrada decimal. Você obtém uma mensagem de erro se você clicar nela. Isso irá filtrar as entradas que, de outra forma, transbordariam para o infinito ou o subfluível para zero, mas também o impedirá de entrar em alguns casos de arredondamento intermediário de ldquohardrdquo. (Para o registro, porém, este conversor aceita todos os exemplos difíceis que I8217ve discutimos no meu site.) Para todas as entradas aceitas no entanto, a saída está correta (apesar de todos os erros que escapam aos meus testes extensivos).

No comments:

Post a Comment