Ir para conteúdo
  • Cadastre-se
Fabiano Furtado

Na matemática, só existe SOMA!

Posts Recomendados

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.

  • Agradecer 2
  • Curtir 2

Compartilhar este post


Link para o post
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.

 

 

Compartilhar este post


Link para o post
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

Editado por l04d
  • Agradecer 2
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×