<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Matemática - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Matemática - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 09 Jun 2026 20:19:36 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/matematica/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 10 elevado a 0: a regra do expoente zero e a potência de zero explicadas ]]>
                </title>
                <description>
                    <![CDATA[ Expoentes são importantes no mundo financeiro, na notação científica e nos campos da epidemiologia e saúde pública. Então, o que eles são e como funcionam? Expoentes são escritos como (3^2) ou (10^3). O que acontece, porém, quando você eleva um número à potência (0) assim? $$10^0 = \text{?}$$ Este artigo ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/10-elevado-a-0-a-regra-do-expoente-zero-e-a-potencia-de-zero-explicadas/</link>
                <guid isPermaLink="false">66e6e5b6275cfd0409135511</guid>
                
                    <category>
                        <![CDATA[ Matemática ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Sun, 15 Sep 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/pexels-katerina-holmes-5905857.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/10-to-the-power-of-0-the-zero-exponent-rule-and-the-power-of-zero-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">10 to the Power of 0: the Zero Exponent Rule and the Power of Zero Explained</a>
      </p><p>Expoentes são importantes no mundo financeiro, na notação científica e nos campos da epidemiologia e saúde pública. Então, o que eles são e como funcionam?</p><p>Expoentes são escritos como (3^2) ou (10^3).</p><p>O que acontece, porém, quando você eleva um número à potência (0) assim?</p><p>$$10^0 = \text{?}$$</p><p>Este artigo vai abordar </p><ul><li>os fundamentos dos expoentes,</li><li>o que eles significam, e</li><li>mostrará que (10^0) é igual a (1) usando expoentes negativos</li></ul><p>Tudo o que estou assumindo é que você tem um entendimento de multiplicação e divisão.</p><h2 id="expoentes-s-o-compostos-de-uma-base-e-um-expoente-ou-pot-ncia-">Expoentes são compostos de uma base e um expoente (ou potência)</h2><p>Primeiro, vamos começar com as partes de um expoente.</p><p>Há duas partes em um expoente:</p><ul><li>a base</li><li>o expoente ou potência</li></ul><p>No início, tínhamos um expoente (3^2). O "3" aqui é a <strong>base</strong>, enquanto o "2" é <strong>o expoente ou potência</strong>.</p><p>Lemos isso como</p><blockquote>Três é elevado à potência de dois.</blockquote><p>ou</p><blockquote>Três elevado a dois.</blockquote><p>Além disso, geralmente, expoentes são escritos como (a^b), onde (a) e (b) podem ser qualquer par de números.</p><h2 id="expoentes-s-o-multiplica-o-para-os-pregui-osos">Expoentes são multiplicação para os "preguiçosos"</h2><p>Agora que entendemos um pouco sobre como falar sobre expoentes, como descobrimos a que número ele equivale?</p><p>Usando nosso exemplo acima, podemos escrever e expandir "três elevado a dois" como</p><p>$$3^2 = 3 \times 3 = 9$$</p><p>O número mais à esquerda no expoente é o número que estamos multiplicando repetidamente. É por isso que você vê vários "3". O número mais à direita no expoente é o número de multiplicações que fazemos. Então, em nosso exemplo, o número 3 (a base) é multiplicado duas vezes (o expoente).</p><p>Alguns outros exemplos de expoentes são:</p><p>$$10^3 = 10 \times 10 \times 10 = 1000$$</p><p>$$2^{10} = 2 \times 2 \times 2 \times 2 \times 2 \times 2 \times 2 \times 2 \times 2 \times 2 = 1024$$</p><p>Além disso, em geral, podemos escrever esses expoentes assim:</p><p>$$\textcolor{orange}{b}^\textcolor{blue}{n} = \underbrace{\textcolor{orange}{b} \times \dots \times \textcolor{orange}{b}}_{\textcolor{blue}{n} \textrm{ vezes}}$$</p><p>onde, a letra <strong>b é a base</strong> que estamos multiplicando repetidamente e <strong>n é a potência</strong> ou <strong>expoente</strong>, que é o número de vezes que estamos multiplicando a base por ela mesma.</p><p>Para os exemplos acima, os valores dos expoentes são relativamente pequenos. Você pode imaginar, porém, que se as potências forem muito grandes, torna-se redundante continuar escrevendo os números repetidamente usando sinais de multiplicação.</p><p><strong>Em suma, os expoentes ajudam a tornar a escrita dessas longas multiplicações mais eficiente.</strong></p><h2 id="n-meros-elevados-a-zero-s-o-iguais-a-um">Números elevados a zero são iguais a um</h2><p>Os exemplos anteriores mostram potências maiores que um, mas o que acontece quando é zero?</p><p>A resposta rápida é que qualquer número, (b), elevado a zero é igual a um.</p><p>$$b^0 = 1$$</p><p>Com base em nossas definições anteriores, só precisamos de zero do valor base. Aqui, vamos ter nosso número base como 10.</p><p>$$10^0 = ? = 1$$</p><p>O que significa, porém, ter um "zero" número de números base? Por que isso acontece?</p><p><strong>Podemos descobrir isso dividindo várias vezes para diminuir o valor da potência até chegarmos a zero.</strong></p><p>Vamos começar com</p><p>$$10^3 = 10 \times 10 \times 10 = 1000$$</p><p>Para diminuir as potências, precisamos entender brevemente os conceitos de <strong>combinação de expoentes</strong> e de <strong>potências de um</strong>.</p><p>Em nossa busca para diminuir o expoente de (10^3) ("dez à terceira potência") para (10^0) ("dez à potência de zero"), continuaremos fazendo o contrário de multiplicar, que é dividir.</p><p>$$\frac{10^3}{10} = \frac{10 \times 10 \times 10}{10} = \frac{1000}{10} = 100$$</p><p>As partes mais à direita desta equação provavelmente fazem sentido. Como escrevemos, no entanto, os expoentes quando temos (10^3) dividido por (10)?</p><h3 id="como-funcionam-as-pot-ncias-de-um">Como funcionam as potências de um</h3><p>Primeiro, <strong>qualquer expoente com potência de um é igual ao número base</strong>.</p><p>$$\textcolor{orange}{b^1} = \textcolor{blue}{b}$$</p><p>Há somente um valor sendo "multiplicado", então obtemos o valor em si.</p><p>Precisamos dessa definição de "potência de um" para que possamos reescrever a fração com expoentes.</p><p>$$\frac{10^3}{10} = \frac{10^3}{10^1}$$</p><h3 id="como-diminuir-expoentes-para-zero">Como diminuir expoentes para zero</h3><p>Como um lembrete, uma maneira de descobrir como (10^0) é igual a 1 é continuar dividindo por 10 até chegarmos a um expoente de zero.</p><p>Sabemos pelo lado direito da equação acima que devemos obter 100 de (\frac{10^3}{10^1}).</p><p>$$\frac{10^3}{10} = \frac{10^3}{10^1} = \frac{10 \times 10 \times 10}{10^1}$$</p><p>Antes de terminarmos de dividir por um 10, podemos multiplicar o topo e o fundo por 1 como marcadores ao cancelar números.</p><p>$$\frac{10 \times 10 \times 10}{10^1} = \frac{10 \times 10 \times 10 \times 1}{10^1 \times 1} = \frac{10 \times 10 \times \cancel{10} \times 1}{\cancel{10^1} \times 1} = \frac{10 \times 10 \times 1}{1}$$</p><p>$$\frac{10 \times 10 \times 1}{1} = \frac{10 \times 10}{1} = \frac{10^2}{1} = \frac{100}{1}$$</p><p>Podemos dividir por 10 mais duas vezes para finalmente chegar a (10^0).</p><p>$$\frac{10^2 \times 1}{10 \times 10 \times 1} = \frac{\cancel{10} \times \cancel{10} \times 1}{\cancel{10} \times \cancel{10} \times 1} = \frac{10^0 \times 1}{1} = \frac{1}{1} = 1$$</p><p>Por termos dividido por dois 10 quando tínhamos apenas dois 10 no topo da fração, temos zero dezenas no topo. Ter zero dezenas basicamente significa que obtivemos (10^0).</p><h3 id="como-funcionam-os-expoentes-negativos">Como funcionam os expoentes negativos</h3><p>Agora, o (10^0) meio que surge do nada, então vamos explorar isso um pouco mais usando "expoentes negativos".</p><p>Em geral, essa divisão repetitiva pela mesma base é o mesmo que multiplicar por "expoentes negativos".</p><p>Um expoente negativo é uma maneira de reescrever a divisão.</p><p>$$\frac{1}{\textcolor{purple}{b^n}}= \textcolor{green}{b^{-n}}$$</p><p>Um <strong>expoente negativo</strong> pode ser reescrito como uma fração com o denominador (ou a parte inferior de uma fração) com <strong>o mesmo expoente, mas com uma potência positiva</strong> (o lado esquerdo desta equação).</p><p>Agora, usando expoentes negativos, podemos mostrar a divisão anterior de outra maneira.</p><p>$$\frac{10^2 \times 1}{10 \times 10 \times 1} = \frac{10^2}{10^2} = 10^2 \times \frac{1}{10^2} = 10^2 \times 10^{-2}$$</p><p><strong>Observação</strong>: uma regra dos expoentes é que, ao multiplicar expoentes com o mesmo número base (lembre-se, nosso número base aqui é 10), você pode somar os expoentes.</p><p>$$10^2 \times 10^{-2} = 10^{2 + (-2)} = 10^{2 - 2} = 10^{0}$$</p><h3 id="juntando-tudo">Juntando tudo</h3><p>Sabendo disso, podemos combinar cada uma dessas equações acima para resumir nosso resultado.</p><p>$$\textcolor{purple}{\frac{10^2}{10^2}} = 10^2 \times 10^{-2} = 10^{2 + (-2)} = 10^{2 - 2} = \textcolor{blue}{10^{0}} \textcolor{orange}{= 1}$$</p><p>Sabemos que <strong>dividir um número por ele mesmo</strong> vai ser <strong>igual a um</strong>. Mostramos que <strong>dividir um número por ele mesmo</strong> também é igual a <strong>dez elevado a zero</strong>. A matemática diz que as coisas que são iguais à mesma coisa também são iguais entre si.</p><p>Assim, <strong>dez elevado a zero</strong> é <strong>igual a um</strong>. O exercício acima se generaliza para qualquer número base, <strong>então qualquer número elevado a zero é igual a um.</strong></p><h2 id="em-resumo">Em resumo</h2><p>Expoentes são maneiras convenientes de fazer multiplicação repetitiva.</p><p>Geralmente, os expoentes seguem o padrão abaixo, com algum <strong>número base</strong> sendo multiplicado repetidamente um <strong>número n de vezes</strong>.</p><p>$$\textcolor{orange}{b}^\textcolor{blue}{n} = \underbrace{\textcolor{orange}{b} \times \dots \times \textcolor{orange}{b}}_{\textcolor{blue}{n} \textrm{ vezes}}$$</p><p>Usando expoentes negativos, podemos pegar o que sabemos de multiplicação e divisão (como para a fração 10 sobre 10,(\frac{10}{10})) para mostrar que (b^0) é igual a um para qualquer número (b) (como (10^0 = 1)).</p><p>Siga o autor no <a href="https://twitter.com/erictleung">Twitter</a> e confira seu <a href="https://erictleung.com">blog pessoal</a>, onde ele compartilha outros insights e recursos úteis para programação, estatística e aprendizagem de máquina.</p><p>Agradecemos pela leitura!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Álgebra booleana – tutorial de tabela verdade – XOR, NOR e símbolos lógicos explicados ]]>
                </title>
                <description>
                    <![CDATA[ Todos nós amamos computadores. Eles podem fazer muitas coisas incríveis. Em algumas décadas, os computadores revolucionaram completamente quase todos os aspectos da vida humana. Eles podem realizar tarefas de vários graus de sofisticação, tudo simplesmente invertendo zeros e uns. É notável ver como uma ação tão simples pode levar a ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/algebra-booleana-tutorial-de-tabela-verdade-xor-nor-e-simbolos-logicos-explicados/</link>
                <guid isPermaLink="false">66b362e2050d6c03fd8b35d5</guid>
                
                    <category>
                        <![CDATA[ Matemática ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 07 Aug 2024 12:40:50 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/08/5f9c9b45740569d1a4ca2aca.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/boolean-algebra/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Boolean Algebra Truth Table Tutorial – XOR, NOR, and Logic Symbols Explained</a>
      </p><p>Todos nós amamos computadores. Eles podem fazer muitas coisas incríveis. Em algumas décadas, os computadores revolucionaram completamente quase todos os aspectos da vida humana.</p><p>Eles podem realizar tarefas de vários graus de sofisticação, tudo simplesmente invertendo zeros e uns. É notável ver como uma ação tão simples pode levar a tanta complexidade.</p><p>Tenho certeza, no entanto, de que todos vocês sabem que tal complexidade não pode ser alcançada (na prática) apenas invertendo os números aleatoriamente. De fato, há algum raciocínio por trás disso. Existem regras que regem a maneira como isso deve ser feito. Neste artigo, discutiremos essas regras e veremos como elas governam a maneira como os computadores "pensam".</p><h2 id="o-que-a-lgebra-booleana"><strong>O que é a álgebra booleana?</strong></h2><p>As regras que mencionei acima são descritas por um campo da matemática chamado Álgebra Booleana.</p><p>Em seu livro de 1854, o matemático britânico George Boole propôs um conjunto sistemático de regras para a manipulação dos valores de <em>verdade</em>. Essas regras deram uma base matemática para lidar com proposições lógicas. Esses conjuntos de fundamentos levaram ao desenvolvimento da Álgebra Booleana.</p><p>Para entender melhor a Álgebra Booleana, primeiro temos que entender as semelhanças e diferenças entre a Álgebra Booleana e outras formas de Álgebra.</p><p>A álgebra, em geral, lida com o estudo de símbolos matemáticos e as operações que podem ser realizadas nesses símbolos.</p><p>Esses símbolos não têm um significado próprio. Eles representam alguma outra "quantidade". É essa "quantidade" que dá algum valor a esses símbolos e é nessa "quantidade" que as operações estão realmente sendo realizadas.</p><p>A Álgebra Booleana também lida com símbolos e com as regras que governam as operações nesses símbolos, mas a diferença está no <em>que esses símbolos representam</em>.</p><p>No caso da Álgebra comum, os símbolos representam os números reais, enquanto, na Álgebra Booleana, eles representam os valores de <em>verdade</em>.</p><p>A imagem abaixo mostra todo o conjunto de números reais. O conjunto de números reais inclui números naturais (1, 2, 3, 4 ....), números inteiros (todos os números naturais, incluindo o 0 e os negativos: .....-2, -1, 0, 1, 2, 3 ...) e assim por diante. A Álgebra comum lida com todo esse conjunto de números.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://www.freecodecamp.org/news/content/images/2020/04/numbersys.png" width="600" height="400" alt="numbersys" loading="lazy"></div></div></div><figcaption>Números reais incluem os números naturais, o zero, números negativos (todos estes juntos compondo os números inteiros) mais os (outros) números racionais e os números irracionais&nbsp;</figcaption></figure><p>Os valores de <em>verdade</em>, em comparação, consistem em um conjunto de apenas dois valores: Falso e Verdadeiro. Aqui, gostaria de salientar o fato de que podemos usar qualquer outro símbolo para representar esses valores.</p><p>Por exemplo, em Ciência da Computação, representamos esses valores, em geral, usando 0 e 1. 0 é usado para Falso e 1 para Verdadeiro.</p><p>Você também pode fazer isso de maneiras mais sofisticadas, representando valores de verdade com alguns outros símbolos, como Gatos e Cães ou Bananas e Laranjas.</p><p>O ponto aqui é que o significado interno desses símbolos permanecerá o mesmo, independentemente do símbolo que você usar. Certifique-se, porém, de não alterar os símbolos durante a execução das operações.</p><p>Agora a questão é que se <em>verdadeiro</em>, <em>falso</em>, 0 e 1 são apenas as representações, o que exatamente eles estão tentando representar?</p><p>O significado subjacente por trás dos valores de verdade vem do campo da Lógica, onde os valores de verdade são usados para dizer se uma proposição é "Verdadeira" ou "Falsa". Aqui, os valores de verdade representam a <em>relação de uma proposição com a verdade, </em>isto é, se a proposição é verdadeira ou falsa.</p><p>Uma proposição é apenas uma <em>declaração</em> como: "Todos os gatos são fofos".</p><p>Se a proposição acima for verdadeira, atribuímos a ela o valor de verdade de "Verdadeiro" ou "1". Caso contrário, atribuímos a ela "Falso" ou "0".</p><p>Na eletrônica digital, os valores de verdade são usados para representar os estados "Ligado" e "Desligado" dos circuitos eletrônicos. Discutiremos mais sobre isso mais adiante neste artigo.</p><h2 id="opera-es-booleanas-e-as-tabelas-verdade"><strong>Operações booleanas e as tabelas verdade</strong></h2><p>Da mesma forma que na Álgebra comum, a Álgebra Booleana também possui operações que podem ser aplicadas aos valores para obter alguns resultados. Essas operações, contudo, não são semelhantes às da álgebra como porque, como discutimos anteriormente, a álgebra booleana funciona com valores de <em>verdade</em> em vez de números reais.</p><h3 id="a-lgebra-booleana-tem-tr-s-opera-es-b-sicas-"><strong>A álgebra booleana tem três operações básicas.</strong></h3><p><strong><strong>OR</strong></strong> (em português, OU): também conhecida como <em><em>Disjun</em>ção</em>. Essa operação é executada com duas variáveis booleanas. A saída da operação OR será 0 quando os dois operandos forem 0. Caso contrário, será 1.</p><p>Para obter uma imagem mais clara do que essa operação faz, podemos visualizá-la com a ajuda de uma <strong>Tabela Verdade</strong> abaixo.</p><pre><code>Tabelas verdade nos dão uma representação interessante do que fazem as operações booleanas, além de servirem como uma ferramenta útil para realizar as operações booleanas.

		Operação OR

Variável 1	Variável 2	Resultado
  0		0		0
  0		1		1
  1		0		1
  1		1		1</code></pre><p><strong><strong>AND</strong></strong> (em português, E): também conhecida como <em><em>Conjun</em>ção</em>. Essa operação é executada com duas variáveis booleanas. A saída das operações AND será 1 quando os dois operandos forem 1. Caso contrário, será 0. A representação da tabela verdade é a seguinte.</p><pre><code>		Operação AND

Variável 1	Variável 2	Resultado
  0		0		0
  0		1		0
  1		0		0
  1		1		1</code></pre><p><strong><strong>NOT</strong></strong> (em português, NÃO): também conhecida como <em><em>Nega</em>ção</em>. Essa operação é executada apenas com uma variável. Se o valor da variável for 1, a operação simplesmente converte o valor em 0 e, se o valor da variável for 0, ela converte o valor em 1.</p><pre><code>	Operação NOT

Variável 1	Resultado
  0		1	
  1		0			</code></pre><h2 id="-lgebra-booleana-e-os-circuitos-digitais"><strong>Álgebra booleana e os circuitos digitais</strong></h2><p>Após seu desenvolvimento inicial, a Álgebra Booleana, por muito tempo, permaneceu um daqueles conceitos em Matemática que não teve uma aplicação prática significativa.</p><p>Na década de 1930, Claude Shannon, um matemático americano, percebeu que a Álgebra Booleana poderia ser usada em circuitos onde as variáveis binárias &nbsp;(0 e 1) poderiam representar os sinais de tensão "baixa" e "alta" ou os estados "ligado" e "desligado".</p><p>Essa ideia simples de fazer circuitos com a ajuda da Álgebra Booleana levou ao desenvolvimento da Eletrônica Digital, que contribuiu fortemente para o desenvolvimento de circuitos para computadores.</p><p>Os circuitos digitais implementam Álgebra Booleana com a ajuda de <em><strong>Portas Lógicas</strong></em>. Portas lógicas são os circuitos que representam uma operação booleana. Por exemplo, uma porta OR representará uma operação OR. Isso também vale para os portões NOT e AND.</p><p>Juntamente com as portas lógicas básicas, também temos portas lógicas que podem ser criadas usando a combinação das portas lógicas básicas.</p><p><strong><strong>NAND</strong></strong> (em português, NÃO E): a porta NAND é formada pela combinação das portas NOT e AND. A porta NAND tem como resultado 0 se as duas entradas forem 1. Caso contrário, seu valor é 1.</p><p>A porta NAND tem a propriedade da <a href="https://pt.wikipedia.org/wiki/Completude_funcional">Completude Funcional</a>, o que significa que qualquer função booleana pode ser implementada simplesmente utilizando apenas uma combinação de portas NAND.</p><pre><code>		Porta NAND

Variável 1	Variável 2	Resultado
  0		0		1
  0		1		1
  1		0		1
  1		1		0</code></pre><p><strong><strong>NOR</strong></strong> (em português, NÃO OU): a porta NOR é formada por uma combinação das portas NOT e OR. A porta NOR tem o resultado de 1 se as duas entradas forem 0. Caso contrário, seu valor é 0.</p><p>A porta NOR, Assim como a porta NAND, tem a propriedade da Completude Funcional (ver acima), o que significa que qualquer função booleana pode ser implementada simplesmente utilizando apenas uma combinação de portas NOR.</p><pre><code>		Porta NOR

Variável 1	Variável 2	Resultado
  0		0		1
  0		1		0
  1		0		0
  1		1		0</code></pre><p>A maioria dos circuitos digitais é construída usando portas NAND ou NOR devido à sua propriedade de completude funcional e também porque são fáceis de fabricar.</p><p>Além das portas mencionadas acima, também temos alguns tipos especiais de portas que servem a um propósito específico. São elas:</p><p><strong><strong>XOR</strong></strong> (em português, OU EXCLUSIVO): a porta XOR, ou "eXclusive-OR", é um tipo especial de porta lógica que retorna 0 como resultado se as duas entradas forem 0 ou 1. Caso contrário, ela retorna 1.</p><pre><code>		Porta XOR

Variável 1	Variável 2	Resultado
  0		0		0
  0		1		1
  1		0		1
  1		1		0</code></pre><p><strong><strong>XNOR</strong></strong> (em português, NÃO OU EXCLUSIVO): a porta XNOR, ou "eXclusive-NOR", é um tipo especial de porta lógica que retorna 1 como resultado se as duas entradas forem 0 ou 1. Caso contrário, ela retorna 0.</p><pre><code>		Porta XNOR

Variável 1	Variável 2	Resultado
  0		0		1
  0		1		0
  1		0		0
  1		1		1</code></pre><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Com isso, podemos agora concluir nossa discussão sobre Álgebra Booleana. Espero que, agora, você tenha uma imagem clara do que a Álgebra Booleana é.</p><p>Isso definitivamente <em>não é</em> tudo que você precisa saber sobre Álgebra Booleana. A Álgebra Booleana tem muitos conceitos e detalhes que não pudemos discutir neste artigo.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Método de Euler explicado com exemplos ]]>
                </title>
                <description>
                    <![CDATA[ O método de Euler é um procedimento numérico de primeira ordem para resolver equações diferenciais ordinárias (EDO ou, em inglês, ODE – ordinary differential equations) com um valor inicial fornecido. O problema do valor inicial geral Metodologia O método de Euler usa a fórmula simples, para construir a tangente no ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/metodo-de-euler-explicado-com-exemplos/</link>
                <guid isPermaLink="false">64ed36d478917103e8a16ac9</guid>
                
                    <category>
                        <![CDATA[ Matemática ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 29 Aug 2023 00:33:06 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/5f9c9d81740569d1a4ca3821.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/eulers-method-explained-with-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Euler's Method Explained with Examples</a>
      </p><p>O método de Euler é um procedimento numérico de primeira ordem para resolver equações diferenciais ordinárias (EDO ou, em inglês, ODE – <em>ordinary differential equations</em>) com um valor inicial fornecido.</p><h2 id="o-problema-do-valor-inicial-geral"><strong><strong>O problema do valor inicial geral</strong></strong></h2><h2 id="metodologia"><strong><strong><strong>Met</strong>odologia</strong></strong></h2><p>O método de Euler usa a fórmula simples,</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/eqn3.png" class="kg-image" alt="eqn3" width="262" height="27" loading="lazy"></figure><p>para construir a tangente no ponto <code>x</code> e obter o valor de <code>y(x+h)</code>, cuja inclinação é</p><figure class="kg-card kg-image-card kg-width-full"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/image-2.png" class="kg-image" alt="image-2" width="370" height="65" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/Euler.png" class="kg-image" alt="Euler" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/Euler.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/Euler.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/08/Euler.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/Euler.png 2400w" sizes="(min-width: 720px) 720px" width="2400" height="1800" loading="lazy"></figure><p>No método de Euler, você pode aproximar a curva da solução pela tangente em cada intervalo (ou seja, por uma sequência de segmentos de linha curtos), em passos de <code>h</code>.</p><p><em>Em geral</em>, se você usar um tamanho de passo menor, a precisão da aproximação aumenta.</p><h2 id="f-rmula-geral"><strong><strong>Fórmula geral</strong></strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/eqn7.png" class="kg-image" alt="eqn7" width="378" height="49" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://raw.githubusercontent.com/pranabendra/articles/master/Euler-method/images/eqn_new_2.png" class="kg-image" alt="eqn_new_2" width="524" height="115" loading="lazy"></figure><p>onde:</p><ul><li>y1+1 é o próximo valor de solução estimado;</li><li>y1 é o valor atual;</li><li>h é o intervalo entre os passos;</li><li>f(x1, y1) é o valor da derivada no ponto atual (x1, y1).</li></ul><h2 id="valor-da-fun-o-em-qualquer-ponto-b-dado-por-y-b-"><strong><strong>Valor da função em qualquer ponto<strong> <code>b</code>, </strong>dado por<strong> <code>y(b)</code></strong></strong></strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/eqn6.png" class="kg-image" alt="eqn6" width="106" height="54" loading="lazy"></figure><p>onde:</p><ul><li><strong><strong><strong><strong>n</strong></strong></strong></strong> = número de passos</li><li><strong><strong><strong><strong>h</strong></strong></strong></strong> = largura do intervalo (tamanho de cada passo)</li></ul><h3 id="pseudoc-digo"><strong><strong><strong>Pseudoc</strong>ódigo</strong></strong></h3><ol><li>defina f(x, y)</li><li>insira x0, y0</li><li>insira h, n</li><li>para j de 0 a (n-1), faça</li></ol><ul><li>yj+1 = yj + hf(xj, yj)</li><li>xj+1 = xj + h</li><li>imprima xj + 1 e yj + 1</li></ul><p>5. fim</p><h2 id="exemplo"><strong><strong>E<strong>x</strong>emplo</strong></strong></h2><p>Encontre <code>y(1)</code>, dado que</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/image-3.png" class="kg-image" alt="image-3" width="237" height="75" loading="lazy"></figure><p>Resolvendo analiticamente, a solução é <em><em><strong><strong><strong><strong>y = e<sup>x</sup></strong></strong></strong></strong></em></em> e <code>y(1)</code>= <code>2.71828</code>. (Observação: essa solução analítica é apenas para comparar a precisão.)</p><p>Usando o método de Euler, considerando que <code>h</code> = <code>0.2</code>, <code>0.1</code>, <code>0.01</code>, você pode ver os resultados no diagrama abaixo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/comparison.png" class="kg-image" alt="comparison" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/comparison.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/comparison.png 640w" width="640" height="480" loading="lazy"></figure><p>Quando <code>h</code> = <code>0.2</code>, <code>y(1)</code> = <code>2.48832</code> (erro = 8.46 %)</p><p>Quando <code>h</code> = <code>0.1</code>, <code>y(1)</code> = <code>2.59374</code> (erro = 4.58 %)</p><p>Quando <code>h</code> = <code>0.01</code>, <code>y(1)</code> = <code>2.70481</code> (erro = 0.50 %)</p><p>Como é possível observar, a precisão aumenta quando os passos são menores.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprendizagem da máquina: uma introdução ao erro quadrático médio e linhas de regressão ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Moshe Binieli Introdução Este artigo tratará do método estatístico do erro quadrático médio. Nele, descreverei a relação deste método com a linha de regressão. O exemplo consiste em pontos sobre o eixo cartesiano. Vamos definir uma função matemática que nos dará a linha reta que melhor passa entre ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/aprendizagem-da-maquina-uma-introducao-ao-erro-quadratico-medio-e-linhas-de-regressao/</link>
                <guid isPermaLink="false">6352b1d8191d0905ea418d80</guid>
                
                    <category>
                        <![CDATA[ Matemática ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Elizabete Nakamura ]]>
                </dc:creator>
                <pubDate>Wed, 30 Nov 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_m_GKsrB2EfnLwwug3ASrtw.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/machine-learning-mean-squared-error-regression-line-c7dde9a26b93/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Machine learning: an introduction to mean squared error and regression lines</a>
      </p><p>Escrito por: Moshe Binieli</p><h3 id="introdu-o"><strong>Introdução</strong></h3><p>Este artigo tratará do método estatístico do <strong>erro quadrático médio</strong>. Nele, descreverei a relação deste método com a <strong>linha de regressão</strong>.</p><p>O exemplo consiste em pontos sobre o eixo cartesiano. Vamos definir uma função matemática que nos dará a linha reta que melhor passa entre todos os pontos do eixo cartesiano.</p><p>Desse modo, aprenderemos a conexão entre esses dois métodos e qual a aparência do resultado de sua conexão.</p><h3 id="explica-o-geral"><strong>Explicação geral</strong></h3><p>Esta é a definição da <a href="https://pt.wikipedia.org/wiki/Erro_quadr%C3%A1tico_m%C3%A9dio">Wikipédia</a>:</p><blockquote><em>Em estatística, o erro quadrático médio (MSE - Mean Squared Error) de um estimador (de um procedimento para estimar uma quantidade não observada) mede a média dos quadrados dos erros - ou seja, a diferença quadrática média entre os valores estimados e o que é estimado. O MSE é uma função de risco, correspondendo ao valor esperado da perda do erro quadrático. O fato do MSE ser quase sempre estritamente positivo (e diferente de zero) é devido à aleatoriedade ou porque o estimador </em>não dá conta das informações<em> que poderiam produzir uma estimativa mais precisa.</em></blockquote><h3 id="a-estrutura-do-artigo"><strong>A estrutura do artigo</strong></h3><ul><li>Saiba qual é a ideia, veja a visualização gráfica e conheça a equação do erro quadrático médio.</li><li>A parte matemática contém as manipulações algébricas e uma derivada de duas funções variáveis para encontrar um mínimo. Esta seção é para <strong>aqueles que querem entender como</strong> obtemos as fórmulas matemáticas mais tarde. Você pode ignorá-la se isso não for do seu interesse.</li><li>Uma explicação das fórmulas matemáticas que recebemos e o papel de cada variável na fórmula.</li><li>Exemplos</li></ul><h3 id="saiba-qual-a-ideia"><strong>Saiba qual é a ideia</strong></h3><p>Digamos que temos sete pontos e que nosso objetivo é encontrar uma linha que <strong>minimize</strong> as distâncias quadráticas para esses pontos diferentes.</p><p>Vamos tentar entender isso.</p><p>Vou pegar um exemplo e desenharei uma linha entre os pontos. É claro que meu desenho não é o melhor, mas é apenas para fins de demonstração.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/MNskFmGPKuQfMLdmpkT-X7-8w2cJXulP3683.png" class="kg-image" alt="MNskFmGPKuQfMLdmpkT-X7-8w2cJXulP3683" width="581" height="572" loading="lazy"><figcaption>Pontos em um gráfico simples.</figcaption></figure><p>Você pode estar se perguntando: o que é esse gráfico?</p><ul><li>os <strong>pontos roxos</strong> são os pontos do gráfico. Cada ponto tem uma coordenada x e uma coordenada y.</li><li>A l<strong>inha azul</strong> é a nossa linha de previsão. Essa é uma linha que passa por todos os pontos e os ajusta da melhor maneira possível. Essa linha contém os pontos previstos.</li><li>A <strong>linha vermelha</strong> entre cada ponto roxo e a linha de previsão são os <strong>erros</strong>. Cada erro é a distância entre o ponto e o seu ponto previsto.</li></ul><p>Você deve se lembrar dessa equação de seus dias de escola, <strong><em>y=Mx+B</em></strong>, onde <strong>M</strong> é a <a href="https://pt.wikipedia.org/wiki/Declive">declive</a> da linha e <strong>B</strong> é o ponto em que a linha <a href="https://en.wikipedia.org/wiki/Y-intercept">intercepta o eixo y</a> (texto em inglês).</p><p>Queremos encontrar M (o declive) e B (o ponto de interceptação de y) que <strong>minimizam</strong> o erro quadrático!</p><p>Vamos definir uma equação matemática que nos dará o erro quadrático médio para todos os nossos pontos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/hmZydSW9YegiMVPWq2JBpOpai3CejzQpGkNG.gif" class="kg-image" alt="hmZydSW9YegiMVPWq2JBpOpai3CejzQpGkNG" width="638" height="176" loading="lazy"><figcaption>Fórmula geral para erro quadrático médio.</figcaption></figure><p>Vamos analisar o que essa equação realmente significa.</p><ul><li>Em matemática, o personagem que parece um E estranho (o sigma, em grego) é chamado de somatório. É a soma de uma sequência de números, de i=1 até i=n. Vamos imaginar isso como um array de pontos, onde passamos por todos os pontos, do primeiro (i=1) ao último (i=n).</li><li>Para cada ponto, tomamos a coordenada y do ponto e a coordenada y' do ponto. A coordenada y é o nosso ponto roxo. O ponto y' está na linha que nós criamos. Subtraímos o valor da coordenada y do valor da coordenada y' e calculamos o quadrado do resultado.</li><li>A terceira parte é pegar a soma de todos os valores (y-y')² e dividi-la por n, o que dará a média.</li></ul><p>Nosso objetivo é minimizar esta média, o que nos proporcionará a melhor linha que passa por todos os pontos.</p><h3 id="do-conceito-s-equa-es-matem-ticas"><strong>Do conceito às equações matemáticas</strong></h3><p>Esta parte é<strong> para as pessoas que querem entender como chegamos às equações matemáticas.</strong> Você pode pular para a próxima parte, se quiser.</p><p>Como você sabe, a equação da linha é y=mx+b, onde m é o <a href="https://pt.wikipedia.org/wiki/Declive">declive</a> e b é o ponto onde a linha <a href="https://en.wikipedia.org/wiki/Y-intercept">intercepta o eixo y</a> (texto em inglês).</p><p>Vamos pegar cada ponto no gráfico e faremos no cálculo de (y-y')². O que é, no entanto, y', e como nós o calculamos? Não temos esse valor como parte dos dados.</p><p>Sabemos, contudo, que, para calcular y', precisamos usar nossa equação de linha, y=mx+b, e colocar o x na equação.</p><p>A partir daqui, obtemos a seguinte equação:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/wSige6ZLxM-QaVt3fRWXIAzsHvX7wdcJ4XOy.png" class="kg-image" alt="wSige6ZLxM-QaVt3fRWXIAzsHvX7wdcJ4XOy" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/wSige6ZLxM-QaVt3fRWXIAzsHvX7wdcJ4XOy.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/wSige6ZLxM-QaVt3fRWXIAzsHvX7wdcJ4XOy.png 800w" sizes="(min-width: 720px) 720px" width="800" height="82" loading="lazy"></figure><p>Vamos reescrever esta expressão para simplificá-la.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/JFi5pzT7YtJ-0Fkx59jP0hCNHzc8tvsrXgPg.png" class="kg-image" alt="JFi5pzT7YtJ-0Fkx59jP0hCNHzc8tvsrXgPg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/JFi5pzT7YtJ-0Fkx59jP0hCNHzc8tvsrXgPg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/JFi5pzT7YtJ-0Fkx59jP0hCNHzc8tvsrXgPg.png 800w" sizes="(min-width: 720px) 720px" width="800" height="62" loading="lazy"></figure><p>Vamos começar abrindo todos os parênteses da equação. Eu colori a diferença entre as equações para facilitar a compreensão.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/vWLTze9HzNDSg4LRM5dbpkYUpkXkhTW6TnRl.png" class="kg-image" alt="vWLTze9HzNDSg4LRM5dbpkYUpkXkhTW6TnRl" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/vWLTze9HzNDSg4LRM5dbpkYUpkXkhTW6TnRl.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/vWLTze9HzNDSg4LRM5dbpkYUpkXkhTW6TnRl.png 800w" sizes="(min-width: 720px) 720px" width="800" height="39" loading="lazy"></figure><p>Agora, vamos aplicar outra manipulação. Pegaremos cada parte e a colocaremos em conjunto. Pegaremos todos os y, (-2ymx) e assim por diante e os colocaremos todos lado a lado.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/y3gkwSWxwAOcxfxMILLV0teW1273PFtFiqW4.png" class="kg-image" alt="y3gkwSWxwAOcxfxMILLV0teW1273PFtFiqW4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/y3gkwSWxwAOcxfxMILLV0teW1273PFtFiqW4.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/y3gkwSWxwAOcxfxMILLV0teW1273PFtFiqW4.png 800w" sizes="(min-width: 720px) 720px" width="800" height="40" loading="lazy"></figure><p>Nesse ponto, estamos começando a ficar confusos. Então, vamos pegar a média de todos os valores quadrados para y, xy, x, x².</p><p>Vamos definir, para cada um desses valores, um novo personagem que representará a média de todos os valores quadráticos.</p><p>Vejamos um exemplo, vamos pegar todos os valores y e dividi-los por n, já que é a média, e chamar esse valor de de y(ao quadrado e com a linha sobrescrita).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/L3NWDFs1LUKgQU223EAFXXUXX3OTFWR0gLtE.png" class="kg-image" alt="L3NWDFs1LUKgQU223EAFXXUXX3OTFWR0gLtE" width="512" height="150" loading="lazy"></figure><p>Se multiplicarmos ambos os lados da equação por n, obtemos:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/jyiOt9MVCg460395d6mkHlrmK9ssfr8nQGJC.png" class="kg-image" alt="jyiOt9MVCg460395d6mkHlrmK9ssfr8nQGJC" width="304" height="55" loading="lazy"></figure><p>O que nos levará à seguinte equação:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/bv3wucYBgHc3Zch115zMYjhH-zYe5VgwjMAH.png" class="kg-image" alt="bv3wucYBgHc3Zch115zMYjhH-zYe5VgwjMAH" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/bv3wucYBgHc3Zch115zMYjhH-zYe5VgwjMAH.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/bv3wucYBgHc3Zch115zMYjhH-zYe5VgwjMAH.png 730w" sizes="(min-width: 720px) 720px" width="730" height="67" loading="lazy"></figure><p>Se olharmos para o que temos, podemos ver que temos uma superfície 3D. Parece um vidro, que se eleva acentuadamente para cima.</p><p>Queremos encontrar M e B que minimizem a função. Faremos uma derivada parcial com respeito à M e uma derivada parcial com respeito à B.</p><p>Como estamos procurando um ponto mínimo, pegaremos as derivadas parciais e compararemos com 0.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/88voRjo799rIopVP8YjsHlNhrBSJ8REg26hY.png" class="kg-image" alt="88voRjo799rIopVP8YjsHlNhrBSJ8REg26hY" width="331" height="117" loading="lazy"><figcaption>Fórmula de derivadas parciais</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/6t-4Uq4Y4GMGg9mYWPUUmHHsmaTvxuDPZCj3.png" class="kg-image" alt="6t-4Uq4Y4GMGg9mYWPUUmHHsmaTvxuDPZCj3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/6t-4Uq4Y4GMGg9mYWPUUmHHsmaTvxuDPZCj3.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/6t-4Uq4Y4GMGg9mYWPUUmHHsmaTvxuDPZCj3.png 775w" sizes="(min-width: 720px) 720px" width="775" height="203" loading="lazy"><figcaption>Derivadas parciais</figcaption></figure><p>Vamos pegar as duas equações que recebemos, isolando a variável b de ambas, e depois subtraindo a equação superior da equação inferior.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/-I3Ly2wOtJf9WiecfOjvFiY6U9DXB4PJBQ6t.png" class="kg-image" alt="-I3Ly2wOtJf9WiecfOjvFiY6U9DXB4PJBQ6t" width="357" height="156" loading="lazy"><figcaption>Escrita diferente das equações após a derivação por partes</figcaption></figure><p>Vamos subtrair a primeira equação da segunda equação</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/6WzsJxr0jSG8XPYz-F2dSmINqnexxJLxWsxi.png" class="kg-image" alt="6WzsJxr0jSG8XPYz-F2dSmINqnexxJLxWsxi" width="499" height="132" loading="lazy"><figcaption>Mescla de duas equações</figcaption></figure><p>Vamos nos livrar dos denominadores da equação.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Ac05NR92faqptoFE35F2XFcKjllJhJPdwGnE.png" class="kg-image" alt="Ac05NR92faqptoFE35F2XFcKjllJhJPdwGnE" width="412" height="122" loading="lazy"><figcaption>Equação final para encontrar M.</figcaption></figure><p>Pronto. Esta é a equação para encontrar M. Vamos pegar isso e escrever a equação B.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/pjxjeSICBJNckegf3WXCHtfrf7dyIxVfqbBB.png" class="kg-image" alt="pjxjeSICBJNckegf3WXCHtfrf7dyIxVfqbBB" width="369" height="58" loading="lazy"><figcaption>Equação final para encontrar B.</figcaption></figure><h3 id="equa-es-para-declive-e-intercepta-o-de-y"><strong>Equações para declive e interceptação de y</strong></h3><p>Vamos fornecer as equações matemáticas que nos ajudarão a encontrar o <a href="https://pt.wikipedia.org/wiki/Declive">declive</a> e a <a href="https://en.wikipedia.org/wiki/Y-intercept">interceptação em y</a> (texto em inglês) necessários.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/290zZ8roKAfKNCrfq1LN7QuTooJjbH19Isiv.png" class="kg-image" alt="290zZ8roKAfKNCrfq1LN7QuTooJjbH19Isiv" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/290zZ8roKAfKNCrfq1LN7QuTooJjbH19Isiv.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/290zZ8roKAfKNCrfq1LN7QuTooJjbH19Isiv.png 629w" width="629" height="180" loading="lazy"><figcaption>Equações de declive e interceptação em y</figcaption></figure><p>Você, provavelmente, deve estar pensando: que raios são essas equações estranhas?</p><p>Elas são realmente simples de entender. Vamos falar um pouco sobre elas.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/KTFy4uhGXnGSrCoyInhSWfHH4VTEnAJyncpm.png" class="kg-image" alt="KTFy4uhGXnGSrCoyInhSWfHH4VTEnAJyncpm" width="475" height="153" loading="lazy"><figcaption>Soma de x dividido por n</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/lQSFx0h7KiRB0uOcriwpFrmhsev3kt4cCUU5.png" class="kg-image" alt="lQSFx0h7KiRB0uOcriwpFrmhsev3kt4cCUU5" width="574" height="172" loading="lazy"><figcaption>Soma de x² dividida por n</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/LYZL8LPc8vyZ0wPV2J2sp-pXiuCzvslY8EAQ.png" class="kg-image" alt="LYZL8LPc8vyZ0wPV2J2sp-pXiuCzvslY8EAQ" width="580" height="172" loading="lazy"><figcaption>Soma de xy dividida por n</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/0E27klUj208HeeecnRKR9Eokb2PmKfUNoO-O.png" class="kg-image" alt="0E27klUj208HeeecnRKR9Eokb2PmKfUNoO-O" width="453" height="154" loading="lazy"><figcaption>Soma de y dividida por n</figcaption></figure><p>Agora que entendemos nossas equações, é hora de juntar tudo e mostrar alguns exemplos.</p><h3 id="exemplos"><strong>Exemplos</strong></h3><p>Um grande agradecimento à <a href="https://www.khanacademy.org/">Khan Academy</a> pelos exemplos.</p><h3 id="exemplo-n-1"><strong>Exemplo nº 1</strong></h3><p>Vamos pegar 3 pontos, (1,2), (2,1), (4,3).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/IudmVD0mo4BMYqPEjFyETchb5GGsDv5ikxwB.png" class="kg-image" alt="IudmVD0mo4BMYqPEjFyETchb5GGsDv5ikxwB" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/IudmVD0mo4BMYqPEjFyETchb5GGsDv5ikxwB.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/IudmVD0mo4BMYqPEjFyETchb5GGsDv5ikxwB.png 691w" width="691" height="582" loading="lazy"><figcaption>Pontos no gráfico.</figcaption></figure><p>Vamos encontrar M e B para a equação y=mx+b.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/KFDixcE4WidM6Pez8RNDwOgBorpnj1QuLw5S.png" class="kg-image" alt="KFDixcE4WidM6Pez8RNDwOgBorpnj1QuLw5S" width="290" height="118" loading="lazy"><figcaption>Pontos no gráfico.</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Rqkh4dC9zZ11V4McMwJFspxv5UySTiI9Sv1L.png" class="kg-image" alt="Rqkh4dC9zZ11V4McMwJFspxv5UySTiI9Sv1L" width="300" height="105" loading="lazy"><figcaption>Soma os valores y e divide por n</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/tkUVYMlF-9qDaK69dWj0bFy1ApEK4DHw05vK.png" class="kg-image" alt="tkUVYMlF-9qDaK69dWj0bFy1ApEK4DHw05vK" width="447" height="141" loading="lazy"><figcaption>Soma os valores xy e divide por n</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/80W3OcjPxF9ek2HIjv0VYnwCEhpzURavMAlj.png" class="kg-image" alt="80W3OcjPxF9ek2HIjv0VYnwCEhpzURavMAlj" width="411" height="106" loading="lazy"><figcaption>Soma os valores x² e divide por n</figcaption></figure><p>Depois de termos calculado as partes relevantes para nossa equação de M e para a equação de B, vamos colocar esses valores dentro das equações e obter o <a href="https://pt.wikipedia.org/wiki/Declive">declive</a> e o ponto de <a href="https://en.wikipedia.org/wiki/Y-intercept">interceptação do eixo y</a> (texto em inglês).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Hri9luC8oVUAgZLnLoDgey4X0T6LEZwIFMav.png" class="kg-image" alt="Hri9luC8oVUAgZLnLoDgey4X0T6LEZwIFMav" width="547" height="127" loading="lazy"><figcaption>Cálculo do declive</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/H4Ss6UYBdSfJgx63lz93uXaubcE3-6e1niFS.png" class="kg-image" alt="H4Ss6UYBdSfJgx63lz93uXaubcE3-6e1niFS" width="351" height="96" loading="lazy"><figcaption>Cálculo do ponto de interceptação do eixo y</figcaption></figure><p>Vamos pegar esses resultados e colocá-los dentro da equação da linha y=mx+b.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/S9EESO6mBvglt1o--YlQZQFqhNGPg4we6Kju.png" class="kg-image" alt="S9EESO6mBvglt1o--YlQZQFqhNGPg4we6Kju" width="149" height="67" loading="lazy"></figure><p>Agora, vamos desenhar a linha e ver como ela passa através das linhas de tal forma que minimize as distâncias quadráticas.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/DlKy-Eekc0SdHpcOeQPGJobo7jYLfTh0pI8Q.png" class="kg-image" alt="DlKy-Eekc0SdHpcOeQPGJobo7jYLfTh0pI8Q" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/DlKy-Eekc0SdHpcOeQPGJobo7jYLfTh0pI8Q.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/DlKy-Eekc0SdHpcOeQPGJobo7jYLfTh0pI8Q.png 669w" width="669" height="564" loading="lazy"><figcaption>Linha de regressão que minimiza o MSE.</figcaption></figure><h3 id="exemplo-n-2"><strong>Exemplo nº 2</strong></h3><p>Vamos pegar 4 pontos, (-2,-3), (-1,-1), (1,2), (4,3).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/MrlSNVYUJEh-4OcRGXEe3hbeU10wjTH-vmDB.png" class="kg-image" alt="MrlSNVYUJEh-4OcRGXEe3hbeU10wjTH-vmDB" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/MrlSNVYUJEh-4OcRGXEe3hbeU10wjTH-vmDB.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/MrlSNVYUJEh-4OcRGXEe3hbeU10wjTH-vmDB.png 739w" sizes="(min-width: 720px) 720px" width="739" height="595" loading="lazy"><figcaption>Pontos no gráfico.</figcaption></figure><p>Vamos encontrar M e B para a equação y=mx+b.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/MqNv9HXhu7koehCq1WgBSH2Mje3VoHUM6Dsb.png" class="kg-image" alt="MqNv9HXhu7koehCq1WgBSH2Mje3VoHUM6Dsb" width="427" height="106" loading="lazy"><figcaption>Soma os valores x e divide por n</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/I8bZESRhxejhmNWbxMlusVlxfCgnrJPbn2En.png" class="kg-image" alt="I8bZESRhxejhmNWbxMlusVlxfCgnrJPbn2En" width="431" height="110" loading="lazy"><figcaption>Soma os valores y e divide por n</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/YwF2k-wP1YkSiPUoZZ5kV99p5xpS4VeBtlxP.png" class="kg-image" alt="YwF2k-wP1YkSiPUoZZ5kV99p5xpS4VeBtlxP" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/YwF2k-wP1YkSiPUoZZ5kV99p5xpS4VeBtlxP.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/YwF2k-wP1YkSiPUoZZ5kV99p5xpS4VeBtlxP.png 800w" sizes="(min-width: 720px) 720px" width="800" height="96" loading="lazy"><figcaption>Soma os valores xy e divide por n</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Sbo7-PaRePrfBM1sOME5du5GDQ-1r1ntdoD1.png" class="kg-image" alt="Sbo7-PaRePrfBM1sOME5du5GDQ-1r1ntdoD1" width="365" height="101" loading="lazy"><figcaption>Soma os valores x² e divide por n</figcaption></figure><p>Fazemos o mesmo que fizemos antes. Vamos colocar esses valores dentro das nossas equações para encontrar M e B.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/LUideJM-zrCgulLv83Gh08ySgcChQXY6BpxC.png" class="kg-image" alt="LUideJM-zrCgulLv83Gh08ySgcChQXY6BpxC" width="442" height="128" loading="lazy"><figcaption>Cálculo do declive</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/F9K53LF0Dp3kjIYYC3UJoLfGJqICCIhtqTMo.png" class="kg-image" alt="F9K53LF0Dp3kjIYYC3UJoLfGJqICCIhtqTMo" width="321" height="100" loading="lazy"><figcaption>Cálculo do ponto de interceptação de y</figcaption></figure><p>Vamos pegar esses resultados e colocá-los dentro da equação da linha y=mx+b.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/0o5OFw2QwtBJYntrz4vRJn9ywrdsumLxH5rg.png" class="kg-image" alt="0o5OFw2QwtBJYntrz4vRJn9ywrdsumLxH5rg" width="238" height="98" loading="lazy"></figure><p>Agora, vamos desenhar a linha e ver como a linha passa através das linhas de tal forma que minimize as distâncias quadráticas.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/yAMNsNJmTBdZ2MKPbD8JX-es3d-5Oj4OIHRl.png" class="kg-image" alt="yAMNsNJmTBdZ2MKPbD8JX-es3d-5Oj4OIHRl" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/yAMNsNJmTBdZ2MKPbD8JX-es3d-5Oj4OIHRl.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/yAMNsNJmTBdZ2MKPbD8JX-es3d-5Oj4OIHRl.png 736w" sizes="(min-width: 720px) 720px" width="736" height="600" loading="lazy"><figcaption>Linha de regressão que minimiza o MSE</figcaption></figure><h3 id="em-conclus-o"><strong>Em conclusão</strong></h3><p>Como você pode ver, toda a ideia é simples. Precisamos apenas entender as partes principais e como trabalhamos com elas.</p><p>Você pode trabalhar com as fórmulas para encontrar a linha em outro gráfico e fazer um cálculo simples e obter os resultados para o <a href="https://pt.wikipedia.org/wiki/Declive">declive</a> e o <a href="https://en.wikipedia.org/wiki/Y-intercept">ponto de interceptação de y</a> (texto em inglês).</p><p>Isso é tudo. Simples, não?</p><p>Todo comentário e todo feedback é bem-vindo – se for necessário, o autor ajustará o artigo. Fique à vontade para entrar em contato diretamente com o autor pelo <a href="http://www.linkedin.com/in/moshe-binieli-22b11a137">LinkedIn</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Gerador de números aleatórios: como os computadores geram números aleatórios ]]>
                </title>
                <description>
                    <![CDATA[ As pessoas usam números aleatórios há milênios. Portanto, o conceito não é novo. Desde a loteria na antiga Babilônia, passando pelas mesas de roleta em Monte Carlo até os jogos de dados em Las Vegas, o objetivo é deixar o resultado final nas mãos de uma chance aleatória. Jogos de ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/gerador-de-numeros-aleatorios-como-os-computadores-geram-numeros-aleatorios/</link>
                <guid isPermaLink="false">633d286bffecac05daeb73c3</guid>
                
                    <category>
                        <![CDATA[ Matemática ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Elizabete Nakamura ]]>
                </dc:creator>
                <pubDate>Tue, 15 Nov 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/10/img-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/random-number-generator/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Random Number Generator: How Do Computers Generate Random Numbers?</a>
      </p><p>As pessoas usam <strong>números aleatórios</strong> há milênios. Portanto, o conceito não é novo. Desde a loteria na antiga Babilônia, passando pelas mesas de roleta em Monte Carlo até os jogos de dados em Las Vegas, o objetivo é deixar o resultado final nas mãos de uma chance aleatória.</p><p>Jogos de azar à parte, a <strong>aleatoriedade</strong> tem muitos usos na ciência, estatística, criptografia e muito mais. No entanto, o uso de dados, moedas ou meios similares como um dispositivo para produzir a aleatoriedade tem suas limitações.</p><p>Por causa da natureza mecânica destas técnicas, gerar grandes quantidades de números aleatórios requer muito tempo e trabalho. Graças à engenhosidade humana, temos ferramentas e métodos mais poderosos à nossa disposição.</p><h2 id="m-todos-para-a-gera-o-de-n-meros-aleat-rios"><strong>Métodos para a geração de números aleatórios</strong></h2><h3 id="n-meros-verdadeiramente-aleat-rios"><strong>Números verdadeiramente aleatórios</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/image-145-opt.png" class="kg-image" alt="image-145-opt" srcset="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/image-145-opt.png 600w" width="600" height="338" loading="lazy"><figcaption>Imagem do dispositivo de processamento analógico de entrada e saída digital. Foto por <a href="https://unsplash.com/@harrisonbroadbent?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Harrison Broadbent</a></figcaption></figure><p>Vamos considerar dois métodos principais usados para gerar números aleatórios. O <strong>primeiro método</strong> é baseado em um processo físico e colhe a fonte da aleatoriedade de algum fenômeno físico que se <strong>espera que seja aleatório</strong>.</p><p>Tal fenômeno se dá fora do computador. Ele é medido e ajustado para possíveis enviesamentos devido ao processo de medição. Exemplos incluem a decadência radioativa, o efeito fotoelétrico, a radiação cósmica de fundo, o ruído atmosférico (que usaremos neste artigo) e muitos outros.</p><p>Assim, os números aleatórios gerados com base nessa aleatoriedade são considerados números aleatórios<strong> "verdadeiros"</strong>.</p><p>Tecnicamente, a parte de hardware consiste em um dispositivo que converte energia de uma forma para outra (por exemplo, radiação para um sinal elétrico), um amplificador e um conversor analógico-digital para transformar a saída em um número digital.</p><h2 id="o-que-s-o-n-meros-pseudoaleat-rios"><strong>O que são números pseudoaleatórios?</strong></h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/image-146-opt.png" class="kg-image" alt="image-146-opt" srcset="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/image-146-opt.png 600w" width="600" height="400" loading="lazy"><figcaption>Imagem do código de computador fluindo através da tela do computador. Foto por <a href="https://unsplash.com/@markusspiske?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Markus Spiske</a>.</figcaption></figure><p>Como alternativa aos números aleatórios "verdadeiros", o <strong>segundo método</strong> de geração de números aleatórios envolve algoritmos computacionais que podem produzir resultados aparentemente aleatórios.</p><p>Por que aparentemente aleatórios? Porque os resultados finais obtidos são, de fato, completamente determinados por um valor inicial também conhecido como o valor de <strong>seed</strong> ou <strong>key</strong>. Portanto, se você souber o valor de chave (<em>key</em>) e como o algoritmo funciona, poderá reproduzir esses resultados aparentemente aleatórios.</p><p>Geradores de números aleatórios deste tipo são frequentemente chamados de geradores de <strong>números pseudoaleatórios</strong> e, como resultado, a saída deles são os números pseudoaleatórios.</p><p>Mesmo que este tipo de gerador, normalmente, não reúna nenhum dado de fontes de aleatoriedade natural, essa coleta de chaves pode ser possível quando necessário.</p><p>Vamos comparar alguns aspectos dos verdadeiros geradores de números aleatórios (ou <strong>TRNGs</strong>) e dos geradores de números pseudoaleatórios (ou <strong>PRNGs</strong>).</p><p>Os PRNGs são mais rápidos do que os TRNGs. Devido à sua natureza determinista, eles são úteis quando você precisa repetir uma sequência de eventos aleatórios. Isto ajuda muito nos testes de código, por exemplo.</p><p>Por outro lado, os TRNGs não são periódicos e funcionam melhor em funções sensíveis de segurança, como a criptografia.</p><p>Um <strong>período</strong> é o número de iterações que um PRNG passa antes de começar a se repetir. Assim, sendo todas as outras coisas iguais, um PRNG com um período mais longo levaria mais recursos computacionais para ser previsto e decifrado.</p><h2 id="exemplo-de-algoritmo-para-o-gerador-de-n-meros-pseudoaleat-rios"><strong>Exemplo de algoritmo para o gerador de números pseudoaleatórios</strong></h2><p>Um computador executa um código que é baseado em um conjunto de regras a serem seguidas. Para PRNGs em geral, essas regras giram em torno do seguinte:</p><ol><li><strong>Aceitar</strong> algum número de entrada inicial, ou seja, uma <em>seed</em> ou <em>key</em>.</li><li><strong>Aplicar</strong> essa <em>seed</em> em uma sequência de operações matemáticas para gerar o resultado. Esse resultado é o número aleatório.</li><li><strong>Usar</strong> esse número aleatório resultante como seed para a próxima iteração.</li><li><strong>Repetir</strong> o processo para emular a aleatoriedade.</li></ol><p>Vejamos um exemplo.</p><h3 id="o-gerador-linear-congruencial"><strong>O gerador linear congruencial</strong></h3><p>Esse gerador produz uma série de números pseudoaleatórios. Dada uma <em>seed</em> inicial <strong>X<sub>0</sub></strong> e parâmetros inteiros <strong>a</strong> como multiplicador, <strong>b</strong> como incremento, e <strong>m</strong> como módulo, o gerador é definido pela relação linear: <strong>Xn ≡ (aXn-1 + b)mod m</strong>. Ou, usando uma sintaxe mais amigável da programação: <strong>Xn = (a * Xn-1 + b) % m</strong>.</p><p>Cada um desses membros tem que satisfazer as seguintes condições:</p><ul><li><strong>m &gt; 0 </strong>(o módulo é positivo),</li><li><strong>0 &lt; a &lt; m </strong>(o multiplicador é positivo, mas menor do que o módulo),</li><li><strong>0 </strong>≤<strong> b &lt; m</strong> (o incremento não é negativo, mas menor do que o módulo), e</li><li><strong>0 </strong>≤<strong> X<sub>0</sub> &lt; m </strong>(a <em>seed</em> não é negativa, mas é menor que o módulo).</li></ul><p>Vamos criar uma função em JavaScript que tome os valores iniciais como argumentos e retorne um array de números aleatórios de um determinado comprimento:</p><pre><code class="language-javascript">    // x0=seed; a=miltiplicador; b=incremento; m=módulo; n=tamanho do array desejado; 
	const linearRandomGenerator = (x0, a, b, m, n) =&gt; {
        const results = []
        for (let i = 0; i &lt; n; i++) {
        	x0 = (a * x0 + b) % m
            results.push(x0)
        }
        return results
    }
	
</code></pre><p>O gerador linear congruencial é um dos mais antigos e mais conhecidos algoritmos PRNG.</p><p>Quanto aos algoritmos geradores de números aleatórios que são executáveis por computadores, eles datam dos anos 40 e 50 (<a href="https://en.wikipedia.org/wiki/Middle-square_method">o método do quadrado do meio</a> e o <a href="https://en.wikipedia.org/wiki/Lehmer_random_number_generator">gerador de Lehmer</a>, por exemplo – textos explicativos em inglês) e continuam a ser escritos hoje (<a href="https://en.wikipedia.org/wiki/Xoroshiro128%2B">Xoroshiro128+</a>, <a href="https://en.wikipedia.org/wiki/Counter-based_random_number_generator_(CBRNG)#Squares_RNG">Squares RNG</a> e mais – textos explicativos em inglês).</p><h2 id="um-gerador-de-n-meros-aleat-rios-de-amostra"><strong>Um gerador de números aleatórios de amostra</strong></h2><p>Quando decidi escrever este artigo sobre a incorporação de um gerador de números aleatórios em uma página da web, tive que fazer uma escolha.</p><p>Eu poderia ter usado a função <strong><code>Math.random()</code></strong> do JavaScript como base e gerar a saída em números pseudoaleatórios como já fiz em artigos anteriores (veja <a href="https://www.freecodecamp.org/news/multiplication-chart-code-your-own-times-table-using-javascript/">Multiplication Chart - Code Your Own Times Table</a> – texto em inglês).</p><p>Este artigo, no entanto, é sobre a geração de números aleatórios. Portanto, decidi aprender a reunir dados "verdadeiros" baseados na aleatoriedade e compartilhar a minha descoberta com vocês.</p><p>Assim, abaixo vemos um gerador de números aleatórios "verdadeiros". Defina os parâmetros e pressione <em>Generate </em>(em português, Gerar).</p><!--kg-card-begin: html--><div class="flex-container" style="margin: 0px; width: 50%; display: flex; flex-direction: column; justify-content: space-around; align-items: center; border-radius: 3px; border: 1px solid rgba(0, 0, 0, 0.06); box-shadow: rgba(0, 0, 0, 0.06) 10px 5px 15px 4px; --darkreader-inline-border-top:rgba(140, 130, 115, 0.06); --darkreader-inline-border-right:rgba(140, 130, 115, 0.06); --darkreader-inline-border-bottom:rgba(140, 130, 115, 0.06); --darkreader-inline-border-left:rgba(140, 130, 115, 0.06); --darkreader-inline-boxshadow:rgba(0, 0, 0, 0.06) 10px 5px 15px 4px;" data-darkreader-inline-border-top="" data-darkreader-inline-border-right="" data-darkreader-inline-border-bottom="" data-darkreader-inline-border-left="" data-darkreader-inline-boxshadow="">
     <div class="row" style="margin: 0px auto; background: rgb(28, 150, 181); color: white; font-size: 2.5rem; font-weight: 600; width: 100%; height: 60px; display: flex; justify-content: space-around; align-items: center; --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#167891; --darkreader-inline-color:#e8e6e3;" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">
    	
            True Random Number Generator
     </div>
     <div class="row" style="margin: 0px auto; background: white; width: 100%; height: 60px; display: flex; justify-content: space-around; align-items: center; --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#181a1b;" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="">
    	 <input style="border: 2px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.06) 0px 0px 15px 4px; border-radius: 5px; font-size: 2.5rem; background: rgb(255, 255, 255); width: inherit; height: inherit; margin: 0px auto; color: rgb(28, 150, 181); --darkreader-inline-border-top:#35393b; --darkreader-inline-border-right:#35393b; --darkreader-inline-border-bottom:#35393b; --darkreader-inline-border-left:#35393b; --darkreader-inline-boxshadow:rgba(0, 0, 0, 0.06) 0px 0px 15px 4px; --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#181a1b; --darkreader-inline-color:#54c7e5;" type="number" name="" id="minimum" required="" placeholder="Lower limit integer value" data-darkreader-inline-border-top="" data-darkreader-inline-border-right="" data-darkreader-inline-border-bottom="" data-darkreader-inline-border-left="" data-darkreader-inline-boxshadow="" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">
       
     </div>
      <div class="row" style="margin: 0px auto; background: white; width: 100%; height: 60px; display: flex; justify-content: space-around; align-items: center; --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#181a1b;" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="">
    	 <input style="border: 2px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.06) 0px 0px 15px 4px; border-radius: 5px; font-size: 2.5rem; background: rgb(255, 255, 255); width: inherit; height: inherit; margin: 0px auto; color: rgb(28, 150, 181); --darkreader-inline-border-top:#35393b; --darkreader-inline-border-right:#35393b; --darkreader-inline-border-bottom:#35393b; --darkreader-inline-border-left:#35393b; --darkreader-inline-boxshadow:rgba(0, 0, 0, 0.06) 0px 0px 15px 4px; --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#181a1b; --darkreader-inline-color:#54c7e5;" type="number" name="" id="maximum" required="" placeholder="Upper limit integer value" data-darkreader-inline-border-top="" data-darkreader-inline-border-right="" data-darkreader-inline-border-bottom="" data-darkreader-inline-border-left="" data-darkreader-inline-boxshadow="" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">
       
     </div>
     <div class="row" style="margin: 0px auto; background: white; color: rgb(28, 150, 181); font-size: 2.5rem; font-weight: 600; width: 100%; height: 60px; display: flex; justify-content: space-evenly; align-items: center; --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#181a1b; --darkreader-inline-color:#54c7e5;" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">
       <div>
             
                            <label for="binary">Binary<label>
             
  					  <input type="radio" id="binary" name="base" value="binary" style="transform: scale(1.3);
                                     margin: 0 3px 0 3px;
                                     vertical-align: middle;">
                                <label for="decimal">Decimal</label>
             
  					  <input type="radio" id="decimal" name="base" value="decimal" checked="checked" style="transform: scale(1.3);
                                     margin: 0 3px 0 3px; 
                                     vertical-align: middle;">
                                <label for="hexadecimal">Hexadecimal</label>
             
  					  <input type="radio" id="hexadecimal" name="base" value="hexadecimal" style="transform: scale(1.3);
                                     margin: 0 3px 0 3px; 
                                     vertical-align: middle;">
  						
					</label></label></div>
     </div>   
     <div class="row" style="margin: 0px auto; background: white; width: 100%; height: 60px; display: flex; justify-content: space-around; align-items: center; --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#181a1b;" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="">
        <button style="background: rgb(28, 150, 181); font-size: 3rem; width: inherit; height: inherit; margin: 0px auto; font-weight: 600; border-radius: 5px; color: rgb(255, 255, 255); --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#167891; --darkreader-inline-color:#e8e6e3;" type="button" id="generate" onclick="handleGenerate()" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">
             Generate
           <audio id="generateSound" src="https://www.fesliyanstudios.com/play-mp3/6683">
        </audio></button>
    </div>  
    <div class="row" style="margin: 0px auto; background: white; color: rgb(28, 150, 181); font-size: 3rem; font-weight: 600; width: 100%; height: 60px; display: flex; justify-content: space-between; align-items: center; --darkreader-inline-bgimage: initial; --darkreader-inline-bgcolor:#181a1b; --darkreader-inline-color:#54c7e5;" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-color="">
       Result: 
            <span style="padding-right: 10px;
                         font-size: 3.2rem;
                         " id="result"></span>
     </div>   
     <div class="row" style="margin: 0 auto; 
                 width: 100%; 
                 height: 60px; 
                 font-size: 3rem;
                 display: flex; 
                 justify-content: space-around;
                 align-items: center;" id="prompter">
    </div>
 </div>
<style>
    
    /* Mobile phones */
    @media screen and (max-width: 767px){
       .flex-container {
          transform: scale(0.60);
         }
     }
    /* Tablets and iPads */
    @media screen and (min-width: 768px) and (max-width: 1023px){
       .flex-container {
          transform: scale(0.8);
       }
    }
</style>
<style class="darkreader darkreader--sync" media="screen"></style>
<script>
    // Element declaration
    const generateButton = document.getElementById('generate');
    const generateSound = document.getElementById('generateSound');
    const minimum = document.getElementById('minimum');
    const maxumum = document.getElementById('maximum');
    const prompter = document.getElementById('prompter');
    const resultValue = document.getElementById('result')
    const binary = document.getElementById('binary')
    const decimal = document.getElementById('decimal')
    const hexadecimal = document.getElementById('hexadecimal')
	
	
   // Animation handling
    const handleActive = (button) => {
        generateSound.currentTime = 0
        generateSound.play()
    	button.style.backgroundColor = '#18809a'
        button.style.transform = 'scale(0.95)'
        setTimeout(() => {
			button.style.backgroundColor = '#1c96b5'
        	button.style.transform = 'scale(1.0)'
        	}, 100)
    }
    
  // Reset handling
   	const handleRestart = () => {
         minimum.value = "";
         maximum.value = ""
   };
  
  
  // Generates a random number within user indicated interval
   const getRandom = async (min, max, base) => {
   	  const response = await fetch("https://www.random.org/integers/?num=1&min=" + min + "&max=" + max + "&col=1&base=" + base + "&format=plain&rnd=new")
      return response.text()
   } 
   
  
  // Output handling
    const handleGenerate = () => {
    	handleActive(generateButton)
        const base = binary.checked ? 2 : decimal.checked ? 10 : 16
        if (!minimum.value || !maximum.value) {
            prompter.style.color = 'red' 
        	prompter.textContent = "Enter Min & Max values"
        } else {
        	getRandom(minimum.value, maximum.value, base).then((data) => {
        		resultValue.textContent = data
        		prompter.textContent = ""    
        	}).catch((error) => {
        		resultValue.textContent = 'ERROR'
        		prompter.textContent = 'Connection error. Unable to 						generate';    
        	})
       		 handleRestart()
        }
        
   }
    
</script><!--kg-card-end: html--><p>O código busca dados de uma das APIs, cortesia da <strong><a href="https://www.freecodecamp.org/portuguese/news/p/700c0dab-2065-4173-a2a9-c12c8783504f/Random.org">Random.org</a></strong><a href="https://www.freecodecamp.org/portuguese/news/p/700c0dab-2065-4173-a2a9-c12c8783504f/Random.org">.</a> Este recurso on-line tem uma infinidade de ferramentas úteis e customizáveis e vem com excelente documentação para acompanhá-lo.</p><p>A aleatoriedade vem do ruído atmosférico. Consegui usar funções assíncronas. Isso é um enorme benefício para o futuro. A função principal se parece com isto:</p><pre><code class="language-javascript">    // Gera um número aleatório dentro do intervalo indicado pelo usuário
   	const getRandom = async (min, max, base) =&gt; {
   		const response = await 	fetch("https://www.random.org/integers/?num=1&amp;min="+min+"
    &amp;max="+max+"&amp;col=1&amp;base="+base+"&amp;format=plain&amp;rnd=new")
          	return response.text() 
   	} </code></pre><p>Os parâmetros necessários permitem que um usuário personalize a saída de números aleatórios. Por exemplo, <strong>min</strong> e <strong>max</strong> permitem definir limites inferiores e superiores na saída gerada. A <strong>base</strong> determina se a saída é impressa como binária, decimal ou hexadecimal.</p><p>Novamente, escolhi esta configuração, mas há muitas mais disponíveis na <a href="https://www.random.org/">fonte</a>.</p><p>Ao clicar no botão Generate, a função <code>handleGenerate()</code> é chamada. Ela, por sua vez, invoca a função assíncrona <code>getRandom()</code>, gerencia o tratamento de erros e os resultados das saídas:</p><pre><code class="language-javascript">    // Tratamento do resultado
    const handleGenerate = () =&gt; {
    	handleActive(generateButton)
        const base = binary.checked ? 2 : decimal.checked ? 10 : 16
        if (!minimum.value || !maximum.value) {
            prompter.style.color = 'red' 
        	prompter.textContent = "Enter Min &amp; Max values"
        } else {
        	getRandom(minimum.value, maximum.value, base).then((data) =&gt; {
        		resultValue.textContent = data
        		prompter.textContent = ""    
        	}).catch((error) =&gt; {
        		resultValue.textContent = 'ERROR'
        		prompter.textContent = 'Connection error. Unable to 						generate';    
        	})
       		 handleRestart()
        }
        
   }</code></pre><p>O restante do código trata da estrutura do HTML, da aparência e do estilo.</p><p>O código está pronto para ser incorporado e utilizado dentro da página da web. Eu o separei em partes componentes e o forneci com comentários detalhados. Ele pode ser facilmente modificado. Você também pode modificar a funcionalidade e os estilos conforme suas necessidades.</p><p>Abaixo temos o link para o repositório no GitHub com o código completo: <a href="https://github.com/sandroarobeli/random-generator">https://github.com/sandroarobeli/random-generator</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ A regra de Simpson: a fórmula e como ela funciona ]]>
                </title>
                <description>
                    <![CDATA[ A regra de Simpson é um método para a integração numérica. Em outras palavras, ela é a aproximação numérica de integrais definidas. A regra de Simpson é a seguinte: Nela,  * f(x) é chamado de integrando  * a = limite inferior da integração  * b = limite ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/a-regra-de-simpson-a-formula-e-como-ela-funciona/</link>
                <guid isPermaLink="false">629007c089eb8b0539f44608</guid>
                
                    <category>
                        <![CDATA[ Matemática ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Mon, 30 May 2022 14:01:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/5f9c9d62740569d1a4ca3781.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/simpsons-rule/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Simpson's Rule: the Formula and How it Works</a>
      </p><p>A regra de Simpson é um método para a integração numérica. Em outras palavras, ela é a aproximação numérica de integrais definidas.</p><p>A regra de Simpson é a seguinte:</p><p>Nela,</p><ul><li><code>f(x)</code> é chamado de <em><em>integrand</em>o</em></li><li><code>a</code> = limite inferior da integração</li><li><code>b</code> = limite superior da integração</li></ul><h2 id="regra-1-3-de-simpson"><strong>Regra 1/3 de Simpson</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim01.jpg" class="kg-image" alt="sim01" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/sim01.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim01.jpg 663w" width="663" height="599" loading="lazy"></figure><p>Como mostra o gráfico acima, o integrando <code>f(x)</code> é aproximado por um polinômio de segunda ordem; o interpolador quadrático é <code>P(x)</code>.</p><p>Temos a aproximação conforme segue:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim3.png" class="kg-image" alt="sim3" width="494" height="56" loading="lazy"></figure><p>Substituindo <code>(b-a)/2</code> por <code>h</code>, temos:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim4.png" class="kg-image" alt="sim4" width="454" height="56" loading="lazy"></figure><p>Como se pode ver, existe um fator de <code>1/3</code> na expressão acima. É por isso que ela é chamada de <strong><strong>Regra <strong><strong>1/3 </strong></strong>de Simpson</strong></strong>.</p><p>Se uma função oscilar excessivamente e não tiver derivadas em determinados pontos, a regra acima pode não produzir resultados precisos.</p><p>Uma maneira comum de se lidar com isso é usar a abordagem <em>composta da regra de Simpson</em>. Para fazer isso, divida <code>[a,b]</code> em subintervalos menores, aplicando a regra de Simpson a cada subintervalo. Em seguida, some os resultados de cada cálculo para produzir uma aproximação da integral inteira.</p><p>Se o intervalo <code>[a,b]</code> for dividido em <code>n</code> subintervalos, e se <code>n</code> for um número par, a regra composta de Simpson é calculada com a seguinte fórmula:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim7-1.png" class="kg-image" alt="sim7-1" width="546" height="73" loading="lazy"></figure><p>onde <strong><strong><strong><strong>x<sub>j</sub> = a+jh</strong></strong></strong></strong> para <strong><strong><strong><strong>j = 0,1,…,n-1,n</strong></strong></strong></strong> com <strong><strong><strong><strong>h=(b-a)/n</strong></strong></strong></strong>; especificamente, <strong><strong><strong><strong>x<sub>0</sub> = a</strong></strong></strong></strong> e <strong><strong><strong><strong>x<sub>n</sub> = b</strong></strong></strong></strong>.</p><h3 id="exemplo-em-c-"><strong>Exemplo em C++:</strong></h3><p>Para aproximar o valor da integral fornecida abaixo, onde n = 8:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim9.png" class="kg-image" alt="sim9" width="150" height="54" loading="lazy"></figure><pre><code class="language-c">#include&lt;iostream&gt;
#include&lt;cmath&gt;
using namespace std;

float f(float x)
{
	return x*sin(x);	//Defina a função f(x)
}

float simpson(float a, float b, int n)
{
	float h, x[n+1], sum = 0;
	int j;
	h = (b-a)/n;
	
	x[0] = a;
	
	for(j=1; j&lt;=n; j++)
	{
		x[j] = a + h*j;
	}
	
	for(j=1; j&lt;=n/2; j++)
	{
		sum += f(x[2*j - 2]) + 4*f(x[2*j - 1]) + f(x[2*j]);
	}
	
	return sum*h/3;
}

int main()
{
	float a,b,n;
	a = 1;		//Insira o limite inferior a
	b = 4;		//Insira o limite superior b
	n = 8;		//Insira o comprimento do passo n
	if (n%2 == 0)
		cout&lt;&lt;simpson(a,b,n)&lt;&lt;endl;
	else
		cout&lt;&lt;"n deve ser um número par";
	return 0;
}</code></pre><h2 id="regra-3-8-de-simpson"><strong>Regra 3/8 de Simpson</strong></h2><p>A regra 3/8 de Simpson é semelhante à regra 1/3 de Simpson. A única diferença está no fato de que, para a regra 3/8, o interpolador é um polinômio cúbico. Embora a regra 3/8 use mais um valor de função, ela é duas vezes mais precisa que a regra 1/3.</p><p>A regra 3/8 de Simpson determina que:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim6-1.png" class="kg-image" alt="sim6-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/sim6-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim6-1.png 660w" width="660" height="56" loading="lazy"></figure><p>Substituindo <code>(b-a)/3</code> por <code>h</code>, temos:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim5.png" class="kg-image" alt="sim5" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/sim5.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim5.png 633w" width="633" height="56" loading="lazy"></figure><p>A regra 3/8 de Simpson para n intervalos (onde n deve ser um múltiplo de 3):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim8.png" class="kg-image" alt="sim8" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/sim8.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/sim8.png 692w" width="692" height="73" loading="lazy"></figure><p>onde <strong><strong><strong><strong>x<sub>j</sub> = a+jh</strong></strong></strong></strong> para <strong><strong><strong><strong>j = 0,1,…,n-1,n</strong></strong></strong></strong> com <strong><strong><strong><strong>h=(b-a)/n</strong></strong></strong></strong>; especificamente, <strong><strong><strong><strong>x<sub>0</sub> = a</strong></strong></strong></strong> e <strong><strong><strong><strong>x<sub>n</sub> = b</strong></strong></strong></strong>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Gerador de números aleatórios em Java – como gerar números inteiros com Math Random ]]>
                </title>
                <description>
                    <![CDATA[ Números aleatórios gerados por computador entram em duas categorias possíveis: números verdadeiramente aleatórios e pseudoaleatórios. Os números verdadeiramente aleatórios são gerados com base em fatores externos. Por exemplo, gerar aleatoriedade usando ruídos circundantes. Porém, gerar números verdadeiramente aleatórios assim é uma tarefa que leva tempo. Por isso, podemos utilizar números ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/gerador-de-numeros-aleatorios-em-java-como-gerar-numeros-inteiros-com-math-random/</link>
                <guid isPermaLink="false">623c96776a6ca90519acfb7a</guid>
                
                    <category>
                        <![CDATA[ Matemática ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 24 Mar 2022 16:48:40 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/03/Untitled-design--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/generate-random-numbers-java/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Java Random Number Generator – How to Generate Integers With Math Random</a>
      </p><p>Números aleatórios gerados por computador entram em duas categorias possíveis: números verdadeiramente aleatórios e pseudoaleatórios.</p><p>Os números verdadeiramente aleatórios são gerados com base em fatores externos. Por exemplo, gerar aleatoriedade usando ruídos circundantes.</p><p>Porém, gerar números verdadeiramente aleatórios assim é uma tarefa que leva tempo. Por isso, podemos utilizar números pseudoaleatórios, que são gerados usando um algoritmo e um valor de <em>seed</em>.</p><p>Esses números pseudoaleatórios são o bastante para a maioria dos fins. Por exemplo, você pode usá-los em criptografia, na criação de jogos, como jogos de dados ou de cartas, bem como na geração de números de OTPs (em inglês, <em>one-time passwords ou </em>senhas de uso único).</p><p>Neste artigo, aprenderemos como gerar números pseudoaleatórios usando <code>Math.random()</code> em Java.</p><h2 id="1-usar-math-random-para-gerar-n-meros-inteiros"><strong>1. Usar Math.random() para gerar números inteiros</strong></h2><p><code>Math.random()</code> retorna um número pseudoaleatório do tipo <em>double</em>, maior que ou igual a zero e inferior a um.</p><p>Vamos experimentar usando código:</p><pre><code class="language-java">    public static void main(String[] args) {
        double randomNumber = Math.random();
        System.out.println(randomNumber);
    }
    // resultado nº1 = 0.5600740702032417
    // resultado nº2 = 0.04906751303932033</code></pre><p><code>randomNumber</code> nos dará um número aleatório diferente para cada execução.</p><p>Digamos que nossa ideia é gerar números aleatórios dentro de um intervalo específico – &nbsp;por exemplo, de zero a quatro.</p><pre><code class="language-java">    // gerar números aleatórios entre 0 e 4
    public static void main(String[] args) {
        // Math.random() gera um número aleatório entre 0.0 e 0.999
        // Assim, Math.random()*5 estará entre 0.0 e 4.999
        double doubleRandomNumber = Math.random() * 5;
        System.out.println("doubleRandomNumber = " + doubleRandomNumber);
        // fazer o casting do número para um número inteiro
        int randomNumber = (int)doubleRandomNumber;
        System.out.println("randomNumber = " + randomNumber);
    }
    /* Resultado nº1
    doubleRandomNumber = 2.431392914284627
    randomNumber = 2
    */</code></pre><p>Quando fazemos o <em>casting</em> de um double para um int, o valor de int mantém apenas a parte inteira do número.</p><p>Por exemplo, no código acima, <code>doubleRandomNumber</code> é <code>2.431392914284627</code> . A parte inteira de <code>doubleRandomNumber</code> é <code>2</code> e a parte fracionária (números após a casa decimal) é <code>431392914284627</code> . Assim, <code>randomNumber</code> guardará apenas a parte inteira do número, <code>2</code>.</p><p>Você pode ler mais sobre o método <code>Math.random()</code> na <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html">documentação do Java</a> (em inglês).</p><p>Usar <code>Math.random()</code> não é a única forma de gerar números aleatórios em Java. A seguir, veremos como gerar números aleatórios usando a classe Random.</p><h2 id="2-usar-a-classe-random-para-gerar-n-meros-inteiros"><strong>2. Usar a classe Random para gerar números inteiros</strong></h2><p>Na classe Random, temos muitos métodos de instância que fornecem números aleatórios. Nesta seção, trataremos de dois métodos de instância, <code>nextInt(int bound)</code> e <code>nextDouble()</code>.</p><h3 id="como-usar-o-m-todo-nextint-int-bound-"><strong>Como usar o método nextInt(int bound)</strong></h3><p><code>nextInt(int bound)</code> retorna um número pseudoaleatório do tipo int, maior que ou igual a zero e menos que o valor de <em>bound</em>.</p><p>O parâmetro <code>bound</code> especifica o intervalo. Por exemplo, se especificarmos que bound (limite, em inglês) é 4, <code>nextInt(4)</code> retornará um valor do tipo int, maior que ou igual a zero e menor que quatro. 0,1,2,3 são os resultados possíveis de <code>nextInt(4)</code> .</p><p>Como esse é um método de instância, devemos criar um objeto da classe Random para acessá-lo. Vamos praticar.</p><pre><code class="language-java">    public static void main(String[] args) {
        // criar um objeto da classe Random
        Random random = new Random();
        // gerar um número aleatório de 0 a 3
        int number = random.nextInt(4);
        System.out.println(number);
    }</code></pre><h3 id="como-usar-o-m-todo-nextdouble-"><strong>Como usar o método nextDouble()</strong></h3><p>Do mesmo modo que em <code>Math.random()</code>, <code>nextDouble()</code> retorna um número pseudoaleatório do tipo double, maior que ou igual a zero e menor que um.</p><pre><code class="language-java">    public static void main(String[] args) {
        // criar um objeto da classe Random
        Random random = new Random();
        // gerar um número aleatório de 0.0 até 0.99...
        double number = random.nextDouble();
        System.out.println(number);
    }</code></pre><p>Para mais informações, é possível ler sobre a classe Random na <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html">documentação do Java</a> (em inglês).</p><h2 id="que-m-todo-para-gerar-n-meros-aleat-rios-devemos-usar"><strong>Que método para gerar números aleatórios devemos usar?</strong></h2><p><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#random--">Math.random()</a></code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#random--"> usa a classe Random</a>. Se queremos apenas números do tipo double em nossa aplicação, então podemos usar <code>Math.random()</code>.</p><p>Do contrário, podemos usar a classe Random, já que ela fornece vários métodos para gerar números pseudoaleatórios de tipos diferentes, como <code>nextInt()</code>, <code>nextLong()</code>, <code>nextFloat()</code> e <code>nextDouble()</code>.</p><p>Obrigado pela leitura.</p><p>A imagem da capa é de <a href="https://unsplash.com/@brett_jordan?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Brett Jordan</a> e obtida no <a href="https://unsplash.com/s/photos/random-numbers?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p><p>Você também pode se comunicar com o autor pelo <a href="https://mvthanoshan.medium.com/">Medium</a>.</p><p><strong>Feliz programação<strong>!</strong></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como encontrar a raiz quadrada de um número e calculá-la à mão ]]>
                </title>
                <description>
                    <![CDATA[ Às vezes, em situações do cotidiano, em que podemos ter de realizar a tarefa de encontrar a raiz quadrada de um número. E se não tivéssemos uma calculadora ou um smartphone à disposição? Poderíamos usar os bons e velhos lápis e papel para fazer isso ao estilo de uma divisão ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-encontrar-a-raiz-quadrada-de-um-numero-e-calcula-la-a-mao/</link>
                <guid isPermaLink="false">6192f694d630de0504ee4142</guid>
                
                    <category>
                        <![CDATA[ Matemática ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 16 Nov 2021 00:42:04 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/5f9c9cba740569d1a4ca33db.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/find-square-root-of-number-calculate-by-hand/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to find the square root of a number and calculate it by hand</a>
      </p><p>Às vezes, em situações do cotidiano, em que podemos ter de realizar a tarefa de encontrar a raiz quadrada de um número. E se não tivéssemos uma calculadora ou um smartphone à disposição? Poderíamos usar os bons e velhos lápis e papel para fazer isso ao estilo de uma divisão longa?</p><p>Sim, podemos. E existem diversos métodos. Alguns deles são mais complexos que outros. Outros fornecem resultados mais precisos.</p><p>O método que desejo compartilhar com vocês é um deles. Para tornar esse artigo mais amigável, cada etapa virá com ilustrações.</p><h2 id="passo-1-separar-os-algarismos-em-pares"><strong>PASSO 1: Separar os algarismos em pares</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step1Alt.png" class="kg-image" alt="step1Alt" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/step1Alt.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step1Alt.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><p>Para começar, vamos organizar nosso espaço de trabalho. Dividiremos o espaço em três partes. Em seguida, vamos separar os algarismos do número em pares, indo da direita para a esquerda.</p><p>Por exemplo, o número 7.469,17 vira <strong><strong>74</strong></strong> &nbsp;<strong><strong>69.</strong></strong> &nbsp;<strong><strong>17</strong></strong>. Ou, no caso de um número com uma quantidade ímpar de algarismos, como 19.036, começaremos com <strong><strong>1</strong></strong> &nbsp;<strong><strong>90</strong></strong> &nbsp;<strong><strong>36</strong></strong>.</p><p>Em nosso caso, 2.025 vira <strong><strong>20</strong></strong> &nbsp;<strong><strong>25</strong></strong>.</p><h2 id="passo-2-encontre-o-maior-n-mero-inteiro"><strong>PASSO 2: Encontre o maior número inteiro</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step2.png" class="kg-image" alt="step2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/step2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step2.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><p>Como próximo passo, precisamos encontrar o maior número inteiro (i) cujo quadrado seja inferior ou igual ao número mais à esquerda.</p><p>Em nosso exemplo, o número mais à esquerda é 20. Como 4² = 16 &lt;= 20 e 5² = 25 &gt; 20, o número inteiro em questão é o 4. Vamos depositar o 4 no canto superior direito e 4² = 16 no canto inferior direito.</p><h2 id="passo-3-agora-subtra-mos-esse-n-mero-inteiro"><strong>PASSO 3: Agora, subtraímos esse número inteiro</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step3.png" class="kg-image" alt="step3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/step3.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step3.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><p>Agora, precisamos subtrair o quadrado daquele número inteiro (igual a 16) do número mais à esquerda (20). O resultado é igual a 4 e escreveremos isso como mostrado acima.</p><h2 id="passo-4-passemos-para-o-pr-ximo-par"><strong>PASSO 4: Passemos para o próximo par</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step4.png" class="kg-image" alt="step4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/step4.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step4.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><p>Passemos para baixo o próximo par do nosso número (ou seja, 25). Escrevemos esse número ao lado do valor subtraído que já está lá (o 4).</p><p>Agora, multiplicamos o número no canto superior direito (que também é 4) por 2. O resultado é 8. Podemos escrever esse número no canto inferior direito, seguido de <strong><strong>_ x _ =</strong></strong><br></p><h2 id="passo-5-encontrando-o-par-perfeito"><strong>PASSO 5: Encontrando o par perfeito</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step5.png" class="kg-image" alt="step5" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/step5.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step5.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><p>Hora de preencher cada espaço em branco com o mesmo número inteiro (i). Ele deve ser o maior número inteiro possível que permita que o produto seja inferior ou igual ao número da esquerda.</p><p>Por exemplo, se escolhermos o número 6, o primeiro número se torna 86 (8 e 6) e devemos multiplicá-lo também por 6. O resultado é 516 e maior do que 425. Um número abaixo e tentamos o 5. O número 8 e o número 5 nos dão 85. 85 vezes 5 resulta em 425, que é exatamente o número de que precisamos.</p><p>Escreva 5 ao lado do 4 no canto superior direito. É o segundo algarismo na raiz.</p><h2 id="passo-6-subtra-mos-novamente"><strong>PASSO 6: Subtraímos novamente</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step6.png" class="kg-image" alt="step6" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/step6.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/step6.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><p>Subtraia o produto que calculamos (425) do número que temos à esquerda no momento (que também é 425). O resultado é zero, o que significa que a tarefa está completa.</p><p><strong>Observação<strong>:</strong></strong> escolhi um quadrado perfeito (2025 = 45 x 45) de propósito. Dessa forma, pude mostrar as regras para a solução de problemas de raiz quadrada.</p><p>De fato, números consistem em vários algarismos, incluindo aqueles após a vírgula. Neste caso, repetimos os passos 4, 5 e 6 até chegarmos à precisão que buscamos.</p><p>No próximo exemplo, você verá o que eu quero dizer.</p><h2 id="exemplo-vamos-mais-longe-"><strong>EXEMPLO: Vamos mais longe...</strong></h2><p>Desta vez, o número consiste em um número ímpar de algarismos, incluindo aqueles após a vírgula.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX1.png" class="kg-image" alt="EX1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/EX1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX1.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX2.png" class="kg-image" alt="EX2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/EX2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX2.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX3.png" class="kg-image" alt="EX3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/EX3.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX3.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX4.png" class="kg-image" alt="EX4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/EX4.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX4.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX5.png" class="kg-image" alt="EX5" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/EX5.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX5.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX6.png" class="kg-image" alt="EX6" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/EX6.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX6.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX7.png" class="kg-image" alt="EX7" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2021/11/EX7.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2021/11/EX7.png 862w" sizes="(min-width: 720px) 720px" width="862" height="360" loading="lazy"></figure><p>Como vemos nesse exemplo, o processo pode se repetir varias vezes até chegar ao nível desejado de precisão.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
