Fóruns

iOS Como você usa sin, cos e tan?

M

MrPenguin9

Pôster original
1 ° de agosto de 2008
  • 13 de maio de 2009
Como você usa sin, cos e tan no iPhone sdk? E também como você usa o inverso deles?

Obrigado

SilentPanda

Moderador emérito
8 de outubro de 2002
A floresta de bambu


  • 13 de maio de 2009
Suponho que você apenas usaria as versões C de cos, sin e tan. M

MrPenguin9

Pôster original
1 ° de agosto de 2008
  • 13 de maio de 2009
Posso ter um exemplo disso, por favor.

Obrigado

PhoneyDeveloper

2 de setembro de 2008
  • 13 de maio de 2009
Código: x = sin(y);
Existe algo mais?

Tente digitar no terminal ou google

homem pecado M

MrPenguin9

Pôster original
1 ° de agosto de 2008
  • 13 de maio de 2009
Mas quando eu faço 'tan (1)' no xcode, ele me retorna 1556013989!?!? Mas o bronzeado de 1 é 0,017455 ... O que estou fazendo de errado?

Obrigado R

Ron C

18 de julho de 2008
Área de Chicago
  • 13 de maio de 2009
Cheira como um problema de tipo

MrPenguin9 disse: Mas quando eu faço 'tan (1)' no xcode, ele me retorna 1556013989!?!? Mas o bronzeado de 1 é 0,017455 ... O que estou fazendo de errado?

Obrigado

1556013989? Pode ser apenas imprimir um valor formatado em ponto flutuante como um inteiro sem a conversão de tipo?

De onde você está obtendo essa função tan ()? math.h? Que tipo tan (), por exemplo, retorna? Leva radianos ou graus? Em que tipo você está armazenando o valor de retorno?

Verifiquei a página de manual de tan () e ela diz:
Código: #include double tan(double x); long double tanl(long double x); float tanf(float x); DESCRIPTION The tan() function computes the tangent of x (measured in radians). Então .... a única função que corresponde a essa assinatura leva um duplo (conversão automática) e retorna um duplo (também conversão automática) e leva radianos.

Como você está vendo o valor? Qual é a aparência do seu código?

EDIT: Acabei de verificar o valor de tan (1 radiano) em Calculator.app - diz: 1.557408. Então ... por que você acha que deveria ser 0,017455? Esse é o valor de tan (1 GRAU) M

MrPenguin9

Pôster original
1 ° de agosto de 2008
  • 13 de maio de 2009
Aqui meu código de MainView.m Code: #import 'MainView.h' @implementation MainView -(void)awakeFromNib { Text.text = [NSString stringWithFormat:@'%d', tan(1)]; } @end (Ah, e eu não sabia que tan (x) estava em radianos.) Obrigado pessoal por ajudar! G

Guiyon

19 de abril de 2008
Cambridge, MA
  • 13 de maio de 2009
MrPenguin9 disse: - (vazio) awakeFromNib {
Text.text = [NSString stringWithFormat '% d', tan (1)];
}

Aí está o seu problema, tan retorna um double, mas a string de formato% d espera um inteiro. Alterar o '% d' para '% lf' deve corrigir isso. Digitar 'man 3 printf' no terminal lhe dará muito mais informações sobre as strings de formato no estilo printf que a Apple (e muitas outras bibliotecas) usa; procure a parte que começa com 'A string de formato é composta de zero ou mais diretivas' R

Ron C

18 de julho de 2008
Área de Chicago
  • 14 de maio de 2009
Uma nota rápida sobre conversão automática e estranheza de ponto flutuante ...

Guiyon disse: Esse é o seu problema, tan retorna um double, mas a string de formato% d espera um inteiro. Alterar o '% d' para '% lf' deve corrigir isso. Digitar 'man 3 printf' no terminal lhe dará muito mais informações sobre as strings de formato no estilo printf que a Apple (e muitas outras bibliotecas) usa; procure a parte que começa com 'A string de formato é composta de zero ou mais diretivas'

Essas conversões de tipo 'mágico' não ocorrem a menos que o compilador saiba que deveria haver um. Um caso em que ele não saberá está em um código como stringWithFormat: - ele não sabe realmente que deve haver uma conversão, então, felizmente, passa adiante um duplo. Depois de começar a brincar com tipos de ponto flutuante, você precisa prestar atenção a isso.

Outra breve observação sobre os tipos de ponto flutuante. Não escreva código como: Code: double a,b; ... if (a == b) { ... O problema com os tipos = e de ponto flutuante é que é muito improvável que sejam iguais. Mesmo algo como: Código: float a,b,c,prod1,prod2; ... // compute values for a, b, and c prod1 = a*b*c; prod2 = c*b*a; if (prod1 == prod2) { ... No quadro branco, esses números são iguais. Dentro do computador, eles não precisam estar. É estranho, mas você precisa se acostumar. M

MrPenguin9

Pôster original
1 ° de agosto de 2008
  • 15 de maio de 2009
Funcionou.

Obrigado a todos por me ajudar!