Friday 25 August 2017

Restrição Subtração Método Opções Binárias


Nota: O bit mais significativo (mais à esquerda) indica o sinal do inteiro, portanto, às vezes é chamado de bit de sinal. Se o bit de sinal for zero, então o número é maior ou igual a zero, ou positivo. Se o bit de sinal for um, então o número é menor que zero, ou negativo. Para calcular o complemento 2s de um inteiro, inverta o equivalente binário do número, alterando todos para zero e todos os zeros para os (também chamado de complemento 1s) e, em seguida, adicione um. 0001 0001 (binário 17) 1110 1111 (dois complementos -17) 1110 1110 (Inverter bits) 1110 1110 0000 0001 1110 1111 (Adicionar 1) A adição de complemento Twos segue as mesmas regras que a adição binária. A subtração de complementos Twos é a adição binária do minuend ao complemento 2s do subtrahend (adicionar um número negativo é o mesmo que subtrair um positivo). A multiplicação de Twos segue as mesmas regras que a multiplicação binária. Vezes 0000 0100 divisão do complemento Twos repete a subtração do complemento 2s. O complemento 2s do divisor é calculado, depois adicionado ao dividendo. Para o próximo ciclo de subtração, o quociente substitui o dividendo. Isso se repete até que o quociente seja muito pequeno para subtração ou seja zero, então ele se torna o restante. A resposta final é o total de ciclos de subtração mais o restante. 7 divide 3 2 restante 1 0000 0000 0000 0001 Representação de sinal-magnitude Outro método de representação de números negativos é a magnitude do sinal. A representação da magnitude do sinal também usa o bit mais significativo do número para indicar o sinal. Um número negativo é a representação binária de 7 bits do número positivo, com o bit mais significativo configurado para um. As desvantagens de usar este método para computação aritmética são que um conjunto diferente de regras são necessárias e que zero pode ter duas representações (0, 0000 0000 e -0, 1000 0000). Representação binária de deslocamento Um terceiro método para representar números assinados é compensado binário. Comece a calcular um código binário de deslocamento, atribuindo metade do maior número possível como o valor zero. Um inteiro positivo é o valor absoluto adicionado ao número zero e um inteiro negativo é subtraído. O binário de deslocamento é popular nas conversões AD e DA, mas ainda é estranho para a computação aritmética. Por exemplo, o maior valor para o inteiro de 8 bits 2 8 256 Offset binário valor zero 256 dividir 2 128 (decimal) 1000 0000 (binário) 1000 0000 (offset binário 0) 0001 0110 (binário 22) 1001 0110 (offset binário 22) Binário Subtração Por Rick Regan emspFebruary 9th, 2012 Esta é a segunda de uma série de quatro partes em ldquopencil e paperrdquo aritmética binária, que I8217m escrevendo como um suplemento para minha calculadora binária. O primeiro artigo discute a adição binária neste artigo que discute a subtração binária. O método de lápis e papel da subtração binária é exatamente como o método de lápis e papel da subtração decimal que você aprendeu na escola primária. Em vez de manipular números decimais, no entanto, você manipula números binários, de acordo com um conjunto básico de regras ou ldquofacts. rdquo Subtração decimal Para a subtração decimal, os fatos básicos são coisas como 5 8211 1 4, 9 8211 8 1 e 18 8211 9 9. Em cada caso, a resposta é um número inteiro, não negativo, de um dígito. A maioria dos fatos são ldquosingle-dígito menos problemas de um dígito, mas alguns são ldquodouble-dígito menos problemas single-digitrdquo (os dígitos duplos são os números 10 a 18). Estes últimos representam casos de empréstimo. Qual é o processo pelo qual as respostas negativas são evitadas. Here8217s um exemplo de subtração decimal: depois que os pontos são alinhados, a subtração prossegue da direita para a esquerda. Marcas vermelhas indicam empréstimo. Se um dígito diferente de zero for emprestado, ele é riscado, um é subtraído dele eo dígito decrementado é escrito acima dele um 1 é então colocado ao lado do dígito na posição de empréstimo, tornando-o um número de dois dígitos . Se um dígito zero é emprestado, o empréstimo ldquocascadesrdquo até um dígito diferente de zero é encontrado. Aqui, o exemplo novamente, passo a passo: algumas pessoas se referem a isso como o método dmqqm da América (embora esta seja apenas uma variação do mesmo, consulte o vídeo de Salman Khan8217s, por exemplo). Seja qual for o seu método, é possível aplicá-lo em números binários. Subtração Binária Para a subtração binária, existem quatro fatos em vez de cem: os três primeiros são os mesmos que em decimal. O quarto fato é o único novo é o caso emprestado. Ele se aplica quando o dígito ldquotoprdquo em uma coluna é 0 eo dígito ldquobottomrdquo é 1. (Lembre-se: em binário, 10 é pronunciado ldquoone-zerordquo ou ldquotwo. rdquo) Agora let8217s subtrair 1011.11 de 10101.101, seguindo o mesmo algoritmo que eu usei para decimal Números: uma vez que existem muitos números em números binários, pode haver muitos penrows 8212 e muitos cross-outs com problemas. Verificando a resposta Você pode verificar a resposta de algumas maneiras. Uma maneira é adicionar o resultado (1001.111) ao subtrahend (1011.11) e verificar se essa resposta corresponde ao minuend (10101.101): Outra maneira é converter os operandos para decimal. Faça subtração decimal e, em seguida, converta a resposta decimal em binário. 10101.101 21,625 e 1011,11 11,75, e 21,625 8211 11,75 9,875. 9.875 1001.111, a resposta que obtivemos usando subtração binária. Você também pode verificar a resposta usando minha calculadora binária. Subtraindo um número maior de um número menor Para subtrair um número maior de um número menor, basta trocar os números, fazer a subtração e negar o resultado. Discussão Observe que eu não discuti a base de números ao descrever o algoritmo que é independente de base. No entanto, eu poderia ter falado sobre poderes de dez e poderes de dois, e como o processo pode ser visualizado reagrupando. Meu objetivo era explicar apenas o algoritmo mecanizado (presumivelmente você faz subtração decimal mecanicamente, não pensando mais sobre o porquê isso funciona). Subtraindo Usando Complementos Computadores don8217t subtrai-se dessa maneira eles subtraem adicionando complementos. It8217s é mais eficiente. Você pode fazer subtração por complementos com lápis e papel, mas você não o encontrará mais eficiente. (Em decimal, você usaria o complemento ou o complemento de dezenas de vezes em binário, você usaria complementos complementares ou dois.) Muito obrigado, estes são métodos simples para aprendizes e ensino de vedavyas, você pode verificar qual dos números é o Maior, simplesmente testando o que começa primeiro (com 822018221), da esquerda para a direita. Por exemplo, let8217s dizem que você tem dois números na forma: 00001. (quatro zeros, depois 1, depois alguns dígitos) 00000. (quatro zeros, então 0, então alguns dígitos) Em ambos os números, as quatro posições mais altas (poderes de 2) são os mesmos: 0, então eles não podem diferir por aqueles. Mas então temos a quinta posição (contando a partir da esquerda) onde a diferença é, e esta é a diferença mais significativa (porque também é o dígito mais significativo). No primeiro número, 828218221 estão presentes nesta posição, o que mostra esta potência particular de 2 (inclui o número). Mas no segundo número, no 82178221 naquela posição, o que significa que este poder de 2 não está incluído. Mesmo que todos os 82208221s no primeiro número estejam configurados para 822008221 e todos os 82208221s no segundo número foram configurados para 822018221s, o primeiro número ainda seria maior em 1 do número inferior, porque o bit mais significativo DOUBLES o que poderia ser coberto Pela combinação de 82208221 bits abaixo dela. Então, todos os 82208221 configurados no número inferior ainda seriam esse poder de 2 menos um em outras palavras, não importa o quanto ele tente, ele nunca pode alcançar o número que tem 822018221 na posição ao lado da linha de 82208221s. Assim, a maneira mais simples de descobrir qual número é maior, é escanear os dois números da esquerda para a direita, um bit a bit (em paridade), e que sempre começará com 822018221 como primeiro, é o maior. Obrigado por isso. Eu acho que nunca descrevi exatamente como determinar o número maior ao olhar para eles em binário. Rick, ainda estou confuso. Eu não consigo entender: explique-me. Basta subtrair 001110 de 110110, em vez de subtrair 110110 a partir de 001110. Então, basta prepender um sinal de menos para sua resposta. It8217s apenas como em decimal: 3-4 é o mesmo que - (4-3). Nos Estados Unidos entre outros países, cada três dígitos decimais são separados com uma vírgula para tornar maiores os números mais fáceis de ler. Por exemplo, 123.456.789 é muito mais fácil de ler e compreender do que 123456789. Vamos adotar uma convenção similar para números binários. Para tornar os números binários mais legíveis, adicionaremos um espaço a cada quatro dígitos a partir do dígito menos significativo à esquerda do ponto decimal. Por exemplo, o valor binário 1010111110110010 será escrito 1010 1111 1011 0010. Conversão de base de número binário para decimal É muito fácil converter de um número binário para um número decimal. Assim como o sistema decimal, multiplicamos cada dígito pela posição ponderada e adicionamos cada um dos valores ponderados em conjunto. Por exemplo, o valor binário 1100 1010 representa: 127 126 025 024 123 022 121 020 1 128 1 64 0 32 0 16 1 8 0 4 1 2 0 1 128 64 0 0 8 0 2 0 Decimal para binário Para converter decimal em binário É um pouco mais difícil. Existem dois métodos, que podem ser usados ​​para converter de decimal para binário, divisão repetida em 2 e subtração repetida pelo valor da posição ponderada. Divisão repetida por 2 Para este método, divida o número decimal em 2, se o restante for 0, no lado, anote um 0. Se o restante for 1, anote um 1. Esse processo é continuado dividindo o quociente por 2 E deixando cair o restante anterior até o quociente é 0. Ao executar a divisão, os restos que representarão o equivalente binário do número decimal serão escritos começando no dígito menos significativo (à direita) e cada novo dígito é escrito em um dígito mais significativo À esquerda) do dígito anterior. Considere o número 2671. Poço numero de cada bit da seguinte maneira: O bit mais à direita em um número binário é a posição do bit zero. Cada bit à esquerda é dado o próximo número de bit sucessivo. O bit zero é geralmente denominado LSB (bit menos significativo). O bit mais à esquerda geralmente é chamado de MSB (bit mais significativo). Referiremos os bits intermediários pelos respectivos números de bits. A menor quantidade de dados em um computador binário é um único bit. Uma vez que um único bit é capaz de representar apenas dois valores diferentes (normalmente zero ou um), você pode ter a impressão de que há um número muito pequeno de itens que você pode representar com um único bit. Não é verdade Existe um número infinito de itens que você pode representar com um único bit. Com um único bit, você pode representar dois itens distintos. Exemplos incluem zero ou um, verdadeiro ou falso, ligado ou desligado, masculino ou feminino, e certo ou errado. No entanto, você não está limitado a representar tipos de dados binários (ou seja, aqueles objetos que possuem apenas dois valores distintos). Para confundir as coisas ainda mais, diferentes bits podem representar coisas diferentes. Por exemplo, um bit pode ser usado para representar os valores zero e um, enquanto um bit adjacente pode ser usado para representar os valores true e false. Como você pode contar, observando os bits. A resposta, é claro, é que você não pode. Mas isso ilustra toda a idéia por trás das estruturas de dados do computador: os dados são o que você define. Se você usar um bit para representar um valor booleano (truefalse), esse bit (por sua definição) representa verdadeiro ou falso. Para que o bit tenha algum significado verdadeiro, você deve ser consistente. Ou seja, se você estiver usando um pouco para representar verdadeiro ou falso em um ponto do seu programa, você não deve usar o valor truefalse armazenado nesse bit para representar vermelho ou azul mais tarde. Como a maioria dos itens que você tentará modelar exigirá mais de dois valores diferentes, os valores de um único bit não são o tipo de dados mais popular. No entanto, uma vez que tudo o resto consiste em grupos de bits, os bits desempenharão um papel importante nos seus programas. Claro, existem vários tipos de dados que exigem dois valores distintos, por isso parece que os bits são importantes por si mesmos. No entanto, você verá em breve que os bits individuais são difíceis de manipular, então, muitas vezes, usam outros tipos de dados para representar valores booleanos. O Nibble A nibble é uma coleção de bits em um limite de 4 bits. Não seria uma estrutura de dados particularmente interessante, exceto dois itens: números BCD (decimal codificado em binário) e números hexadecimais (base 16). Demora quatro bits para representar um único BCD ou dígito hexadecimal. Com um nibble, podemos representar até 16 valores distintos. No caso de números hexadecimais, os valores 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F são representados com quatro bits. BCD usa dez dígitos diferentes (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) e requer quatro bits. Na verdade, qualquer dezesseis valores distintos podem ser representados com um nibble, mas os dígitos hexadecimais e BCD são os itens principais que podemos representar com um único nibble. O bit 0 é o bit de baixa ordem ou o bit menos significativo, o bit 7 é o bit de alta ordem ou o bit mais significativo do byte. Bem, consulte todos os outros bits pelo número deles. Um byte também contém exatamente dois petiscos. Os bits b0 a b3 compreendem o nibble de ordem inferior, e os bits b4 a b7 formam o nibble de alta ordem. Como um byte contém exatamente dois nibbles, os valores de byte requerem dois dígitos hexadecimais. Uma vez que um byte contém oito bits, ele pode representar 28 ou 256 valores diferentes. Geralmente, use um byte para representar: valores numéricos não assinados no intervalo 0 gt 255 números assinados na faixa -128 gt 127 códigos de caracteres ASCII outros tipos de dados especiais que não requerem mais de 256 valores diferentes. Muitos tipos de dados têm menos de 256 itens, então oito bits geralmente são suficientes. Como o PC é uma máquina endereçável endereçável, resulta ser mais eficiente manipular um byte inteiro do que um bit ou nibble individual. Por esse motivo, a maioria dos programadores usa um byte inteiro para representar tipos de dados que não requerem mais de 256 itens, mesmo que menos de oito bits sejam suficientes. Por exemplo, muitas vezes representam os valores booleanos verdadeiros e falsos por 00000001 e 00000000 (respectivamente). Provavelmente, o uso mais importante para um byte é manter um código de caractere. Os caracteres digitados no teclado, exibidos na tela, e impressos na impressora, têm valores numéricos. Para permitir que ele se comunique com o resto do mundo, o IBM PC usa uma variante do conjunto de caracteres ASCII. Existem 128 códigos definidos no conjunto de caracteres ASCII. A IBM usa os restantes 128 valores possíveis para códigos de caracteres estendidos, incluindo caracteres europeus, símbolos gráficos, letras gregas e símbolos matemáticos. NOTA: O limite para um Word é definido como 16 bits ou o tamanho do barramento de dados para o processador, e um Word duplo é duas palavras. Portanto, um Word e um Word duplo não é um tamanho fixo, mas varia de sistema para sistema, dependendo do processador. No entanto, para a nossa discussão, vamos definir uma palavra como dois bytes. Para os 8085 e 8086, uma palavra é um grupo de 16 bits. Vamos numerar os bits em uma palavra a partir do bit zero (b0) até quinze (b15) da seguinte maneira: Como o byte, o bit 0 é o LSB e o bit 15 é o MSB. Ao referenciar os outros bits em uma palavra, use seu número de posição de bit. Observe que uma palavra contém exatamente dois bytes. Os bits b0 a b7 formam o byte de baixa ordem, os bits 8 a 15 formam o byte de alta ordem. Naturalmente, uma palavra pode ser dividida em quatro petiscos. Nibble zero é o nibble de ordem inferior na palavra e nibble three é o nibble de ordem superior da palavra. Os outros dois nibbles são quotnibble onequot ou quotnibble twoquot. Com 16 bits, você pode representar 216 (65,536) valores diferentes. Estes poderiam ser os valores numéricos não assinados no intervalo de 0 gt 65,535, valores numéricos assinados no intervalo de -32,768 gt 32,767, ou qualquer outro tipo de dados com não mais de 65,536 valores. Os três principais usos para palavras são valores de dados inteiros de 16 bits. Endereços de memória de 16 bits, qualquer sistema de números que requer 16 bits ou menos. A Palavra dupla. Uma palavra dupla é exatamente o que o nome indica, duas palavras. Portanto, uma quantidade de duas palavras é de 32 bits. Naturalmente, esta palavra dupla pode ser dividida em uma palavra de alta ordem e uma palavra de ordem baixa, quatro bytes ou oito petiscos. As palavras duplas podem representar todos os tipos de dados diferentes. Pode ser uma palavra dupla não assinada na faixa de 0 gt 4,294,967,295, uma palavra dupla assinada na faixa de -2,147,483,648 gt 2,147,483,647, um valor de ponto flutuante de 32 bits, qualquer dado que requer 32 bits ou menos. Trabalhando com Logarithms Udregning ved hjaeliglp af logaritmer Um logaritmo é usado quando se trabalha com exponenciação. Todos aprendemos que a fórmula X Y Z significa tomar o valor Y e multiplicar por si próprio o número de vezes especificado por Z. Por exemplo, 2 3 8 (222). O valor Z é o valor exponencial da equação. Enquanto você sabe quais são os valores Y e Z na equação, é fácil calcular o valor de X. En logaritme bruges, naringr der udregnes med eksponent. Vi laeligrte alle, em formlen X Y Z betyder, tag vaeligrdien Y og multiplicador (gang) den med sig selv antallet af gange angivet af Z. Para eksempel, 2 3 8 (222). Vaeligrdien Z er eksponentiel-vaeligrdien i ligningen. Sair Lelignge man kender, hvad Y og Z vaeligrdierne er i ligningen, er det nemt em beregne vaeligrdien af ​​X. Infelizmente, você nem sempre sabe o valor de Y e Z. Como você determina Z se você conhece o valor de X e Y. Isso é quando você usa um logaritmo. Um logaritmo é o valor exponente que indica o número de vezes que o valor Y precisa ser multiplicado por si mesmo para obter o valor X. O valor que é multiplicado (Y) é considerado como base da fórmula. Uheldigvis kender man ikke altid vaeligrdien af ​​Y og Z. Hvordan bestemmer man Z. hvis man kender vaeligrdien af ​​X og Y. Det er da, man bruger en logaritme. Em logaritme er eksponent-vaeligrdien, som angiver antallet af gange vaeligrdien Y behoslashver em multiplicador explícito (ganget) med sig selv para vencedor vaeligrdien X. Vaeligrdien som er multiplicador (ganget) (Y) betragtes som grundtallet i formlen. Existem dois tipos básicos de logaritmos: comuns e naturais. Um logaritmo comum usa um valor 10 como o valor base. Portanto, na fórmula básica para exponenciação acima, XY Z. o valor de Y é 10 e Z é o número de vezes que Y precisa ser multiplicado por si mesmo para retornar o valor indicado por X. Der er to grundlaeligggende typer af logaritmer : Saeligdvanlig og naturlig. En saeligdvanlig logaritme bruger en vaeligrdi 10 som grundtal. Derfor i den grundlaeligggende eksponent-formel ovenfor, X Y Z. er vaeligrdien af ​​Y 10, og Z er antallet af gange som Y behoslashver em multiplicador explícito (ganget) med sig selv para at returnere vaeligrdien angivet af X. Os logaritmos naturais usam um valor base de aproximadamente 2.71828182845905, normalmente referido como e. A notação matemática e é Eulers constante, a base de algoritmos naturais, feita pelo matemático Leonhard Euler (Basileia, Suíça, 15 de abril de 1707 - Rússia, 18 de setembro de 1783). O VBScript fornece duas funções para trabalhar com logaritmos: Exp () e Log (). Cada uma dessas funções pressupõe que o valor base é e. A função Log () retorna o logaritmo natural da expressão numérica fornecida e a função Exp () aumenta a expressão numérica fornecida para e. Os métodos semelhantes em JavaScript são chamados: Math. exp () e Math. log (). Naturlige logaritmer bruger et grundtal paring tilnaeligrmelsesvis 2,71828182845905, eu reglen henvist til som e. Den etiquetado notação e er Eulers konstant, de naturlige algoritmers grundtal, gjort alminding af matematikeren Leonhard Euler (Basileia, Schweiz, 15 de abril de 1707 - Rusland, 18. setembro de 1783). VBScript para o funktioner til udregninger med logaritmer: Exp () og Log (). Hver af disse funktioner antager, no grundtallet er e. Log () funktionen returnerer den naturlige logaritme til det elimine numeriske udtryk, og Exp () funktionen oploslashfter det leverede numeriske udtryk til e. De lignende metoder i JavaScript kaldes: Math. exp () og Math. log (). É possível usar essas funções VBScript ou JavaScript se você tiver um valor de base diferente usando uma fórmula simples. Ao dividir o log natural do número desejado (X) pelo log natural da base desejada (Y), você pode determinar o valor de logaritmo desejado (Z) no VBScript: Log Z (Log) (Y) ou similar em JavaScript : Z ((Math. log (X)) (Math. log (Y))). Detrão de dados em bruge disse VBScript funktioner eller Método de JavaScript, hvis man har et and grundtal ved at bruge en simpel formel. (Z) i VBScript: Registro Z (X) Log (Y) eller lignende (X) Log (X) Log (Y) Eller lignende (Z) i VBScript: Z Log (X) Log (Y) Eller lignende I JavaScript: Z ((Math. log (X)) (Math. log (Y))). Comentários de JavaScript: JavaScript bemaeligrkninger: a função personalizada Pow2 (NumDbl). Que retorna a base para uma potência exponente de 2 e a função personalizada Log2 (NumDbl). Que calcula os logaritmos base-2, pode ser visto neste código fonte das páginas. Eles usam o método JavaScript Math. pow (), que retorna a base para o poder exponente, ou seja, o expoente base. E uma fórmula baseada no método JavaScript Math. log (), que retorna o logaritmo natural (base E) de um número. Funktionen lavet paring besbing Pow2 (NumDbl). Som retornador grundtallet til en eksponent potens af 2, og funktionen lavet paring bestilling Log2 (NumDbl). Som beregner grundtal-2 logaritmer, kan ses i denne sides kildekode. De bruger henholdsvis JavaScript Math. pow () metoden, som retornador grundtallet til en eksponent potens, det vil sige grundtal eksponent. Og en formel baseret paring JavaScript Math. log () metoden, som returnerer den naturlige logaritme (grundtal E) af et tal. Veja o JavaScript por View Source Se JavaScriptet via Vis Kilde Você pode ver o JavaScript usando View Source. Man kan se JavaScriptet ved no bruge Vis Kilde. Minhas Fontes Mine Kilder Fontes: Vários livros, Internet e várias enciclopédias. Kilder: Forskellige boslashger, internettet og forskellige leksikoner. Representação de dados de computador e sistemas de números Dados de computador repraeligsentation og talsystemer Bit (s) e Byte (s) Conversão Omregn bit (s) og byte (s) Calcule o tempo estimado de download de arquivos Beregn anslaringet fil download-tid Bit (s) e Byte (s) ) Termos Bit (s) og byte (s) udtryk Quantificadores - SI (Systegraveme International) prefixos, juntamente com as interpretações binárias correspondentes. The peta - principle - Artigo de julho a setembro de 1994 GatherScatter de Jim Binder. Etimologia das Unidades Data Powers of Ten - Estes exemplos ilustram vários meios de comunicação de dados de acordo com a quantidade de dados que eles podem conter, de um único bit para um yottabyte. Sistema De Número Decimal Sistema De Número Binário Sistema De Número Octal Sistema De Número Hexadecimal BCD (Decimal Codificado Binário) Sistema De Número Código ASCII Os primeiros 32 caracteres. ASCII códigos 0 a 1Fh, formam um conjunto especial de caracteres não-impressos chamados de caracteres de controle. O segundo grupo de 32 códigos de caracteres ASCII compreende vários símbolos de pontuação, caracteres especiais e os dígitos numéricos. O terceiro grupo de 32 caracteres ASCII é reservado para caracteres alfabéticos em maiúsculas e seis símbolos especiais. O quarto e final grupo de 32 códigos de caracteres ASCII são reservados para símbolos alfabéticos em minúsculas, cinco símbolos especiais adicionais e outro caractere de controle (apagar). CODIGO ASCII Divisão CHARTInteger De todas as operações elementares, a divisão é a mais complicada e pode consumir a maioria dos recursos (em silício, implementar o algoritmo em hardware, ou no tempo, para implementar o algoritmo em software). Em muitas aplicações de computador, a divisão é menos utilizada do que a adição, subtração ou multiplicação. Como resultado, alguns microprocessadores projetados para processamento de sinal digital (DSP) ou aplicativos de processador incorporados não possuem uma instrução de divisão (eles também geralmente omite suporte de ponto flutuante também). Recentemente, fiz alguns trabalhos preliminares sobre o design da fase de geração de código para um compilador que visaria um processador de sinal digital. Este processador não possui uma instrução de divisão e não tinha idéia de quanto tempo demoraria para implementar a função de tempo de execução necessária para suportar a divisão de números inteiros no software. A resposta, afinal, depende. Se tudo o que for necessário é uma função de divisão básica e o desempenho não é um problema importante, a função de tempo de execução é bastante direta. Uma função de divisão de alto desempenho é mais complicada e levaria mais tempo para implementar e testar. A função de divisão que está incluída aqui é da primeira variedade - uma função básica de divisão binária inteira. Eu também incluí algumas referências sobre algoritmos de alto desempenho, mas esses são, como meus professores costumavam dizer, deixados como exercícios para o leitor. O algoritmo de divisão inteira incluído aqui é um chamado algoritmo radix de duas divisões. É necessário um passo de computação para cada dígito binário. Existem algoritmos 4, 8, 16 e até 256, que são mais rápidos, mas são mais difíceis de implementar. A referência principal que usei na implementação do meu algoritmo foi a Digital Computer Arithmetic by Cavanaugh. Várias outras referências sobre a divisão de radix alta também estão listadas abaixo. Aritmética de Computador Digital: Design e Implementação por Joseph J. F. Cavanaugh, McGraw-Hill, 1984. Este é um trabalho de referência extremamente valioso, mas pode estar sem impressão. Esta é uma das melhores pesquisas que eu vi em aritmética de computador digital e design de hardware. Organização e Design de Computadores: The Hardware Software Interface de David A. Patterson e John L. Hennessy, Morgan Kaufmann Press. Este livro tem uma seção breve (em comparação com Cavanaugh) na aritmética digitial. É um excelente livro sobre arquitetura de computador e deve ser lido por qualquer pessoa que crie um processador de sinal digital. Análise de Algoritmos e Implementações de Divisão por Stuart F. Oberman e Michael J. Flynn, Laboratório de Sistemas Computacionais da Universidade de Stanford, CSL-TR-95- 675. Este documento, se disponível via ftp em postscript, comprimido com zip (este arquivo pode ser descompactado com descompactação do GNU). Divisão de alta radix com estimativa aproximada de dígito de quociente por Peter Fenwick, Departamento de Ciência da Computação, Universidade de Auckland, Nova Zelândia (pfenwickcs. auckland. ac. nz). Este artigo está disponível na World Wide Web. O documento do Professor Fenwicks descreve um algoritmo de divisão de radix com alguns refinamentos próprios. O site da Universidade de Paderborn também tem um ponteiro para o que é suposto ser uma versão pós-publicação do documento do Prof. Fenwicks. No entanto, quando tentei baixá-lo, tudo que recebi foi lixo. O postscript também pode ser baixado da Universidade de Auckland (ftp: ftp. cs. auckland. ac. nzoutpeter-fdivision. ps). Meu algoritmo de divisão inteira é escrito em C e está incluído abaixo. O arquivo pode ser baixado aqui. A divisão é o processo de subtração repetida. Como a longa divisão que aprendemos na escola primária, um algoritmo de divisão binária funciona a partir dos dígitos de alta ordem para os dígitos de baixa ordem e gera um quociente (resultado de divisão) em cada etapa. O algoritmo de divisão é dividido em duas etapas: Mude os bits superiores do dividendo (o número em que estamos dividindo) para o restante. Subtrair o divisor do valor no restante. O bit de alta ordem do resultado torna-se um pouco do quociente (resultado da divisão). Ian Kaplan outubro de 1996

No comments:

Post a Comment