Jump to content

Recommended Posts

Posted

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++

Posted

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++

Posted (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 by petvetbr

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted (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 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!

Posted

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!

Posted (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 by thoga31

Knowledge is free!

Posted (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 by jviana

Learning

  • VB.Net
  • HTML
  • C/C++

Posted (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 by thoga31

Knowledge is free!

Posted

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!

Posted (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 by jviana

Learning

  • VB.Net
  • HTML
  • C/C++

Posted

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!

Posted

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++

Posted (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 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.

  • 2 weeks later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.