Apoiador Nibble Fabiano Furtado Postado Novembro 25, 2017 em 17:03 Apoiador Nibble Compartilhar Postado Novembro 25, 2017 em 17:03 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 More sharing options...
Eduardo Bittencourt Postado Novembro 26, 2017 em 09:52 Compartilhar Postado Novembro 26, 2017 em 09:52 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 More sharing options...
l04d Postado Novembro 26, 2017 em 11:56 Compartilhar Postado Novembro 26, 2017 em 11:56 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 More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.