Ir para conteúdo

Na matemática, só existe SOMA!


Fabiano Furtado

Posts Recomendados

  • Apoiador Nibble

Pessoal,

acredito que todos já saibam disso pois faz parte da matemática básca, mas é interessante pensar sobre: na matemática, só existe SOMA!

Eu considero que a subtração, a multiplicação e a divisão são "alias" (ou atalhos) para a soma.

Por exemplo:
* quando fazemos 3 - 2 = 1, estamos fazendo uma soma pois, na verdade, estamos fazendo 3 + (-2) = 1
  (soma de um número positivo com um número negativo)
* quando multiplicamos 3 * 2 = 6, estamos fazendo várias somas pois, na verdade, estamos fazendo 2 + 2 + 2 = 6
  (estamos somando N vezes um número)
  Uma coisa interessante... sabemos que o resultado de 3 * 2 = 2 * 3, mas em nível de processamento, é diferente: 3 * 2 = 2 + 2 + 2 e 2 * 3 = 3 + 3
* quando dividimos 6 / 3 = 2, estamos fazendo soma pois, na verdade, estamos somando quantas vezes 3 "cabe dentro" de 6.
  (ou podemos pensar que a subtração é o contrário da multiplação e que a multiplicação é uma soma)

Mas e daí? Qual a relação disso com a computação? 

Se pensarmos em um microprocessador moderno, sabemos que ele possui instruções específicas para somar e subtrair, por exemplo. Entretanto, conseguiríamos desenvolver um microprocessador mais simples somente com a instrução de soma e chegaríamos no mesmo resultado.

Como dizia o Fernando Mercês, o computador é uma máquina de calcular gigante! (e que só faz soma!) ;)

É isso. Será que estou errado em pensar assim?

Desde já, obrigado.

Link para o comentário
Compartilhar em outros sites

Faz sentido sim, afinal todo número sem sinal é positivo

Só uma obs: Quando você faz 3 * 2 não seria a repetição de 3 duas vezes ?

E se fosse 2 * 3 não seria a repetição de 2  três vezes?

De qualquer forma, seria a  subtração a soma de um numero natural com a soma de um número inteiro negativo,  aplicando neste contexto é claro. Afinal todo número natural é subconjunto dos números inteiros positivos.

 

 

Link para o comentário
Compartilhar em outros sites

 

Em 11/25/2017 em 15:03, Fabiano Furtado disse:

acredito que todos já saibam disso pois faz parte da matemática básca, mas é interessante pensar sobre: na matemática, só existe SOMA!

 

Pensar assim se não é, é muito perto de ser uma falsa dicotomia, não é só porque da para subtrair somando, que subtração não existe, alias eu posso usar a mesma técnica para dizer que "na matemática só existe subtração, na verdade quando estamos somando estamos subtraindo, 3+2 = 5, é -(-3)-(-2) = 5" e assim por diante.

Em 11/25/2017 em 15:03, Fabiano Furtado disse:

Se pensarmos em um microprocessador moderno, sabemos que ele possui instruções específicas para somar e subtrair, por exemplo. Entretanto, conseguiríamos desenvolver um microprocessador mais simples somente com a instrução de soma e chegaríamos no mesmo resultado.

 

Aqui você está equivocado, processadores como 8051 e PICs que são bastante usados na area de embed e não tem suporte para signed ints, ou seja, não tem suporte a números negativos, como você faz a sua mágica da subtração nesses processadores? em primeiro lugar temos que lembrar que naturalmente a mátematica não existe, regras mátematicas só funcionam se forem implementadas, historicamente os processadores só tinham disponível para aritimética full adders(http://www.physics.udel.edu/~watson/scen103/colloq2000/images/adder2.gif) e full subs(http://www.electronics-tutorials.ws/combination/comb56.gif), para fazer a multiplicação era usado por exemplo:

int mul(int x, int y)
{
    unsigned int ret = 0;
    while (y != 0) {
        if (y & 1) {
            ret += x;
        }
        x <<= 1;
        y >>= 1;
    }
    return ret;
}

(não que você fosse implementar uma função para multiplicar, mas o processador fazia isso quando usado equivalente ao atual mul)

Em 11/25/2017 em 15:03, Fabiano Furtado disse:

Mas e daí? Qual a relação disso com a computação? 

 

como você pode ver, isso está simplismente decompondo para uma adição, e então empurrando os bits para o lugar e repitindo, complexidade computacional O(n^2) em vez de O(n) como adição,

int add(int x, int y)
{
    if (y == 0) 
        return x;
    else
        return add( x ^ y, (x & y) << 1);
}

lembrando que você pode implementar qualquer uma das operações aritiméticas básicas somente com as instruções de operação de bit, mas isso atualmente é perda de tempo, a maioria dos processadores tem ALUs (arithmetic logic units) muito eficientes, uma multiplicação caso a informação não sofra um desalinhamento no fetch, pode definitivamente fazer uma multiplicação tão rápido quanto uma adição, existem vários algoritmos para cada tamanho de número, que pode reduzir a complexidade das divisões e multiplicações por mais da metade, e.g: Fürer's algorithm (O(n log n 2^O(log*n)), Toom-3 (O(n^1.465)), Karatsuba algorithm (O(n^1.585)), Newton–Raphson division(O(M(n))

https://en.wikipedia.org/wiki/Division_algorithm#Newton.E2.80.93Raphson_division

https://en.wikipedia.org/wiki/Fürer's_algorithm

https://en.wikipedia.org/wiki/Karatsuba_algorithm

https://en.wikipedia.org/wiki/Toom–Cook_multiplication

 

-- wgr

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...