jviana Posted September 23, 2012 at 04:48 PM Report #476266 Posted September 23, 2012 at 04:48 PM Boas pessoal, hoje decidi a começar a estudar C# e resolvi fazer uns exercícios daqui. No exercício 5, apareceu uma coisa que nunca tinha dado a devida importância, a variável float (virgula flutuante). http://msdn.microsoft.com/pt-pt/library/b1e65aza(v=vs.71).aspx, estava no tópico acima para ajudar, e vi. Pesquisei sobre o assunto, e sai que tem a ver com a Notação Binário e Científica. Aprendi a escrever números em binários para tentar perceber o float mas nada. Peço ajuda. Cumps. J.Viana Learning VB.Net HTML C/C++
pmg Posted September 23, 2012 at 05:05 PM Report #476269 Posted September 23, 2012 at 05:05 PM Lê o artigo What Every Programmer Should Know About Floating-Point Arithmetic (não é apenas a página inicial). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
jviana Posted September 23, 2012 at 06:11 PM Author Report #476274 Posted September 23, 2012 at 06:11 PM Continuo a não perceber, podes simplificar? Li que tem a haver com a memorio finita, e que punham os números em notação cientifica, mas ainda não percebo o que é o float? É o numero de casas décimais? Tipo o "E" ou "e" (10e2) Cumps. J.Viana Learning VB.Net HTML C/C++
petvetbr Posted September 23, 2012 at 06:21 PM Report #476276 Posted September 23, 2012 at 06:21 PM (edited) Sim, Float um dos tipos que podem conter casas decimais no c#. Os outros são Double e decimal, sendo este último utilizado para cálculos monetários ou onde não pode haver aproximação das casas decimais (cálculo exato). Edited September 23, 2012 at 06:22 PM by petvetbr Fernando Lage Bastos - MCP/MCTS/MCPD
pmg Posted September 23, 2012 at 06:23 PM Report #476277 Posted September 23, 2012 at 06:23 PM (edited) Sabes converter números binários "simples" para a notação normal, certo? 1010010001(2) = 1*2^9 + 1*2^7 + 1*2^4 + 1*2^0 = 512 + 128 + 16 + 1 = 657 Podes alargar este conceito para expoentes negativos 10.1001(2) = 1*2^1 + 1*2^(-1) + 1*2^(-4) = 2.5625 Edited September 23, 2012 at 06:24 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
jviana Posted September 23, 2012 at 07:55 PM Author Report #476284 Posted September 23, 2012 at 07:55 PM Sim sei, onde é que a float entra aqui? Learning VB.Net HTML C/C++
pmg Posted September 23, 2012 at 09:00 PM Report #476291 Posted September 23, 2012 at 09:00 PM Hmm ... ok, tou a ver a tua dúvida. Imagina o número 123456,789. Podes dizer que corresponde ao número 123456789 dividido por 1000 (ou seja com virgula na posicao 3). Por outro lado, o número 12345678900000 pode corresponder ao número 123456789 dividido por 1/100000 (ou seja com virgula na posicao -5). A mesma representação ("123456789") com posicao de virgula flutuante representa números diferentes. O nome do tipo de dados (float ou double) é certamente baseado na representação e, a meu ver, um exagero. Seria talvez mais simples chamar-lhes "reais" e deixar a representação para a implementação (para quem escreve os compiladores). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
thoga31 Posted September 23, 2012 at 09:06 PM Report #476295 Posted September 23, 2012 at 09:06 PM (edited) O nome do tipo de dados (float ou double) é certamente baseado na representação e, a meu ver, um exagero. Seria talvez mais simples chamar-lhes "reais" e deixar a representação para a implementação (para quem escreve os compiladores). Existem linguagens que o faziam, e ainda o fazem, mas mais recentemente adoptaram igualmente os tipos distintos float e double. O que eu "gosto" particularmente nesta diferença é que alguns cálculos dão resultados "porreiros". Por exemplo: >>> # Cálculo com float (default do Python) ... 1302 * 0.03 39.059999999999995 Qual aconselhas que se utilize preferencialmente? Float ou Double? Edited September 23, 2012 at 09:07 PM by thoga31 Knowledge is free!
jviana Posted September 23, 2012 at 09:08 PM Author Report #476297 Posted September 23, 2012 at 09:08 PM (edited) Analisando este código: // keyword_float.cs // Mixing types in expressions using System; class MixedTypes { public static void Main() { int x = 3; float y = 4.5f; short z = 5; Console.WriteLine("The result is {0}", x*y/z); } } O float é só uma variável, certo? Mas então, se eu fizer uma calculadora básica (+, -, *, /) como posso usar float? Como está no exercício 5. É para mostrar o output em Notação Científica? Cumps. J.Viana Edited September 23, 2012 at 09:09 PM by jviana Learning VB.Net HTML C/C++
thoga31 Posted September 23, 2012 at 09:15 PM Report #476301 Posted September 23, 2012 at 09:15 PM (edited) Usas o float como qualquer outro tipo de dados (e não variável!). Float é apenas uma forma de representar um número decimal a nível interno. Há linguagens que fazem o output em notação científica por default e há outras que não. Isso é uma característica da linguagem, não do tipo de dados. Edited September 23, 2012 at 09:16 PM by thoga31 Knowledge is free!
pmg Posted September 23, 2012 at 09:19 PM Report #476302 Posted September 23, 2012 at 09:19 PM Qual aconselhas que se utilize preferencialmente? Float ou Double? Em C, sem dúvida, double. Costumo dizer uma frase a respeito disso que vou repetir aqui: Na ausência duma forte razão para fazer diferente, escolhe variáveis de tipo double para guardar valores reais. A sugestão do professor em usar float não é uma forte razão antes de o tentar convencer que double é preferível. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
jviana Posted September 23, 2012 at 09:24 PM Author Report #476303 Posted September 23, 2012 at 09:24 PM (edited) Nível interno ? Como assim? Binário? A conta está mal calculada, pesquisei e diz que um computador não consegue calcular com exactidão a conta, porque? Edited September 23, 2012 at 09:26 PM by jviana Learning VB.Net HTML C/C++
thoga31 Posted September 23, 2012 at 09:27 PM Report #476304 Posted September 23, 2012 at 09:27 PM Nível interno? Como assim? O computador não representa os dados com letras e números, mas sim em binário. Float é uma forma de representar um número real em memória e que difere do Double segundo o método que o @pmg já referiu. A conta está mal calculada, pesquisei e diz que um computador não consegue calcular com exactidão a conta, porque? "Mal calculada" entre aspas, os números reais têm um nível de incerteza. Um conceito porreiro que vais aprender, ou já deves ter aprendido, a Física e Química ou CFQ. 😉 Knowledge is free!
jviana Posted September 23, 2012 at 09:31 PM Author Report #476306 Posted September 23, 2012 at 09:31 PM Um conceito porreiro que vais aprender, ou já deves ter aprendido, a Física e Química ou CFQ. 😉 Este ano não devo aprender na escola, vou começar a dar circuitos, e umas coisas do transito e das direcções, sentidos. Entre tanto vou pesquisar, sobre o assunto. Em que ano se dá isso? Cumps. J.Viana Learning VB.Net HTML C/C++
mogers Posted September 24, 2012 at 08:45 AM Report #476329 Posted September 24, 2012 at 08:45 AM (edited) Como o Pmg referiu acima, a parte fraccionaria e' representada como somas de potencias de 2 com expoente negativo. 2^-1 = 0.5 2^-2 = 0.25 2^-3 = 0.125 2^-4 = 0.0625 ... Assim, há números que simplesmente não são representáveis usando este sistema. Um exemplo simples e' o "0.1". Não e' possível representar o numero 0.1 com um numero finito de potencias de base 2 (nenhum computador pode ter uma precisão ilimitada). Podes tentar ler este tutorial http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=integersReals nota que tem 2 partes (section 1 e 2). Edited September 24, 2012 at 09:10 AM by mogers "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
HappyHippyHippo Posted September 24, 2012 at 09:15 AM Report #476342 Posted September 24, 2012 at 09:15 AM (edited) Apresentação de um valor de virgula flutuante em notação cientítifa double value = 321386.34512; Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture)); Edited September 24, 2012 at 09:16 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
jviana Posted October 2, 2012 at 08:50 PM Author Report #477484 Posted October 2, 2012 at 08:50 PM Obrigado, ajudaram imenso Learning VB.Net HTML C/C++
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now