TRANSFORMAR INT32 EM FLOAT!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

TRANSFORMAR INT32 EM FLOAT!

Mensagempor jandom » 08 Jan 2010 20:45

senhores mestres, tem como transformar um variavel INt32 em FLOAT?
Estou contando um tempo do timer1, que esta em INT32 TEMPO e preciso comparar este valor com duas constantes que estao em float Ex: float Tempo_limite1=3.6s e float Tempo_limite2=3.1s

grato
jandom
Byte
 
Mensagens: 132
Registrado em: 03 Nov 2006 20:40

Mensagempor barboza » 08 Jan 2010 20:51

Você pode transformar a variavel INT em float, mas ela será sempre inteira.


Você até poderia comparar um float (fracionado) com um INT, e até poderia ter um resultado positivo.

Mas comparar um INT com constantes float fracionadas (3.6 e 3.1) o seu resultado será sempre negativo.


Bem, mas imagino que como esta medindo tempo com timer, é possivel transformar o contador na base de tempo desejado.

Ex.: Se seu timer/contador é de 1KHz, entao o valor 1000 será = 1s, logo 3600 (INT) == 3.6s (float). Entendeu?
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor MOR_AL » 08 Jan 2010 22:48

Talvez seja mais interessante transformar float em Int.
Se você quizer usar, por exemplo, duas casas decimais do valor em float, então escale sua comparação.
Ex.: F = 3,21457....
I = Int(F * 100) = 321
Para fazer a aproximação para o inteiro mais próximo, faça:

I = Int((F + 0,0055) * 100) = 322

Mas antes você tem que fazer uma relação (biunívoca) entre a variação dos valores Float com a dos valores Int.

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor jandom » 08 Jan 2010 23:09

signed long int t0_conta;
#int_timer1

void trata_t1 ()
{
static int conta;

set_timer1(1000 + get_timer1());
conta++;
// se já ocorreram 2 interrupções
if (conta == 2)
{
conta=0;
TEMPO++;
}
}


na rotina acima, pego o valor de TEMPO e comparo com os valores em Float.

Ex.: Se seu timer/contador é de 1KHz, entao o valor 1000 será = 1s, logo 3600 (INT) == 3.6s (float). Entendeu?

Esta correto entao?
jandom
Byte
 
Mensagens: 132
Registrado em: 03 Nov 2006 20:40

Mensagempor MOR_AL » 10 Jan 2010 07:43

Crie os valores constantes que você deseja Constante_1 e Constante_2.
Ambas com 16 bits (word).
Ex.:
Constante_1 = Tempo_limite1 = 3,6 * 1000 = 3600
Constante_2 = Tempo_limite2 = 3,1 * 1000 = 3100
O TIMER1 cria uma interrução a cada 1ms. Compare os valores constantes (Constante_1 e Constante_2) diretamente com o valor do seu contador (acho que é a variável TEMPO).
Não se esqueça que o loop do seu programa dura algum tempo, logo, o valor do timer1 deve ser menor que 1ms. Assim haverá a compensação.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor jandom » 12 Jan 2010 13:40

MOR_AL, obrigado pela ajuda!
jandom
Byte
 
Mensagens: 132
Registrado em: 03 Nov 2006 20:40

Mensagempor fabim » 12 Jan 2010 13:54

MOR_AL escreveu:Talvez seja mais interessante transformar float em Int.
Se você quizer usar, por exemplo, duas casas decimais do valor em float, então escale sua comparação.
Ex.: F = 3,21457....
I = Int(F * 100) = 321
Para fazer a aproximação para o inteiro mais próximo, faça:

I = Int((F + 0,0055) * 100) = 322

Mas antes você tem que fazer uma relação (biunívoca) entre a variação dos valores Float com a dos valores Int.

MOR_AL


Biunívoco - polémica
[Pergunta] Esta palavra faz-me espécie. Como pôde ser dicionarizada?

Eduardo de Medeiros :: :: Almada, Portugal
[Resposta] 1 - Biunívoco é um termo consagrado no jargão dos matemáticos, e distingue-se de unívoco. Refere-se a funções ou correspondências entre dois conjuntos, mas estes não são mutuamente exclusivos, pelo contrário: uma correspondência biunívoca é em particular unívoca, mas é mais do que meramente unívoca.

Uma correspondência de um conjunto noutro diz-se unívoca, se a dois elementos distintos do primeiro conjunto se fizerem corresponder elementos também distintos do segundo. Por exemplo, se fizermos corresponder a cada pessoa o seu nome próprio, esta não é uma correspondência unívoca, já que a diferentes pessoas se faz corresponder o mesmo nome (e.g. Maria). No entanto, se fizermos corresponder a cada pessoa o número do seu B.I., esta já é uma correspondência unívoca: não há (não deve haver) duas pessoas com o mesmo número de B.I.

Uma correspondência diz-se biunívoca se for unívoca e a cada elemento do segundo conjunto se fizer corresponder algum elemento do primeiro. No exemplo dos B.I., a correspondência não é biunívoca, uma vez que existem números aos quais não está atribuído nenhum B.I. Um exemplo de uma correspondência biunívoca é aquela que faz corresponder a cada número o seu simétrico em símbolos, e, se chamarmos f à correspondência em causa, temos: f(1)=-1, f(2)=-2, f(3)=-3, etc., e também f(-1)=1, f(-2)=2, f(-3)=3, etc.

É claro que nas correspondências acima estão subentendidos os "primeiro" e "segundo" conjuntos, aos quais se dá o nome de domínio e contradomínio (ou conjunto de chegada), respectivamente. No primeiro exemplo, o domínio é o conjunto de todas as pessoas e o contradomínio é o conjunto de todos os nomes próprios. Para o segundo exemplo, temos como domínio o conjunto de todas as pessoas que têm B.I. e como contradomínio o conjunto dos números naturais. Finalmente, no terceiro exemplo, o domínio e o contradomínio coincidem, e são neste caso o conjunto dos números inteiros.

A escolha do contradomínio pode determinar a qualidade de uma correspondência ser biunívoca ou não. Se no último exemplo tivéssemos escolhido para conjunto de chegada o conjunto de todos os números reais (incluindo as fracções e os irracionais), a correspondência deixaria de ser biunívoca, continuando contudo a ser unívoca.

Embora desajeitadas quando explicadas por palavras, estas definições são fáceis de compreender com esquemas de "setinhas", os chamados diagramas de Venn. Desenhe-se um círculo com pontinhos lá dentro para representar o domínio, os pontinhos representando os elementos do conjunto. Desenhe-se ao lado um segundo círculo com os respectivos pontinhos representando o contradomínio. Partindo de cada elemento do domínio, desenhe-se uma seta a apontar para o elemento do contradomínio ao qual se faz corresponder o primeiro elemento. Uma correspondência é unívoca se duas setas nunca apontarem para o mesmo elemento do conjunto de chegada. Se além disso todos os elementos do contradomínio tiverem uma seta para si dirigida, então a aplicação (outro nome para correspondência) diz-se biunívoca.

Não me parece que haja contradição na palavra «biunívoco». Bi- porque é unívoca nos dois sentidos: a elementos distintos do domínio correspondem elementos distintos do contradomínio, e a cada elemento do contradomínio corresponde pelo menos um elemento do domínio.

É um termo enraizado e reconhecido. Não me parece que os matemáticos estejam dispostos a abdicar por completo dele. Há, no entanto, sinónimos: Biunívoco = bijectivo (um-a-um). Este termo é pouco comum em Português, mas há quem o use.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor jandom » 12 Jan 2010 17:38

Tenho um amigo, que ele não é japa, mas sua formação sim, e disse:
"se não aprendi alguma coisa no dia, estou ficando "baka" cada vez mais"
jandom
Byte
 
Mensagens: 132
Registrado em: 03 Nov 2006 20:40

Mensagempor guest2003 » 12 Jan 2010 18:23

float Int2Float

Int2Float = (float) variavel I32 / 1000;

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x