Foros

iOS ¿Cómo se usa sin, cos y tan?

METRO

MrPenguin9

Poster original
1 de agosto de 2008
  • 13 de mayo de 2009
¿Cómo se usa sin, cos y tan en el sdk del iPhone? ¿Y también cómo usas el inverso de ellos?

Gracias

SilentPanda

Moderador emérito
Oct 8, 2002
El bosque de bambú


  • 13 de mayo de 2009
Supongo que solo usarías las versiones C de cos, sin y tan. METRO

MrPenguin9

Poster original
1 de agosto de 2008
  • 13 de mayo de 2009
¿Puedo darme un ejemplo de eso, por favor?

Gracias

PhoneyDeveloper

Sep 2, 2008
  • 13 de mayo de 2009
Código: x = sin(y);
Hay algo mas

Intente escribir esto en la terminal o busque en Google

hombre pecado METRO

MrPenguin9

Poster original
1 de agosto de 2008
  • 13 de mayo de 2009
Pero cuando hago 'tan (1)' en xcode me devuelve 1556013989!?!? Pero el bronceado de 1 es 0.017455 ... ¿Qué estoy haciendo mal?

Gracias R

Ron C

Jul 18, 2008
Área de Chicago
  • 13 de mayo de 2009
Huele a problema de tipo

MrPenguin9 dijo: ¡Pero cuando hago 'tan (1)' en xcode, me devuelve 1556013989!?!? Pero el bronceado de 1 es 0.017455 ... ¿Qué estoy haciendo mal?

Gracias

1556013989? ¿Podría estar imprimiendo un valor con formato de punto flotante como un número entero sin la conversión de tipo?

¿De dónde obtiene esta función tan ()? matemáticas.h? ¿Qué tipo devuelve tan (), por ejemplo? ¿Toma radianes o grados? ¿En qué tipo estás almacenando el valor de retorno?

Revisé la página de manual de tan () y dice:
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). Entonces ... la única función que coincide con esa firma toma un doble (conversión automática) y devuelve un doble (también conversión automática) y toma radianes.

¿Cómo ve el valor? ¿Cómo es tu código?

EDITAR: Acabo de verificar el valor de tan (1 radianes) en Calculator.app, dice: 1.557408. Entonces ... ¿por qué crees que debería ser 0.017455? Ese es el valor de bronceado (1 GRADO) METRO

MrPenguin9

Poster original
1 de agosto de 2008
  • 13 de mayo de 2009
Aquí mi código de MainView.m Código: #import 'MainView.h' @implementation MainView -(void)awakeFromNib { Text.text = [NSString stringWithFormat:@'%d', tan(1)]; } @end (Oh, y no sabía que tan (x) estaba en radianes.) ¡Gracias a todos por ayudar! GRAMO

Guiyon

Mar 19, 2008
Cambridge, MA
  • 13 de mayo de 2009
MrPenguin9 dijo: - (void) awakeFromNib {
Text.text = [NSString stringWithFormat '% d', tan (1)];
}

Ahí está su problema, tan devuelve un doble pero la cadena de formato% d espera un número entero. Cambiar el '% d' a '% lf' debería arreglar eso. Si escribe 'man 3 printf' en la terminal, obtendrá mucha más información sobre las cadenas de formato de estilo printf que utiliza Apple (y muchas otras bibliotecas); busque la parte que comienza con 'La cadena de formato se compone de cero o más directivas' R

Ron C

Jul 18, 2008
Área de Chicago
  • 14 de mayo de 2009
Una nota rápida sobre la conversión automática y la rareza del punto flotante ...

Guiyon dijo: Ahí está tu problema, tan devuelve un doble pero la cadena de formato% d espera un número entero. Cambiar el '% d' a '% lf' debería arreglar eso. Si escribe 'man 3 printf' en la terminal, obtendrá mucha más información sobre las cadenas de formato de estilo printf que utiliza Apple (y muchas otras bibliotecas); busque la parte que comienza con 'La cadena de formato se compone de cero o más directivas'

Estas conversiones de tipo 'mágico' no ocurren a menos que el compilador sepa que debería haber una. Un caso en el que no lo sabrá es en un código como stringWithFormat: - realmente no sabe que debería haber una conversión, por lo que felizmente pasa a lo largo de un doble. Una vez que comiences a jugar con tipos de punto flotante, debes prestar atención a eso.

Otra breve nota sobre los tipos de coma flotante. No escriba código como: Código: double a,b; ... if (a == b) { ... El problema con los tipos = y de punto flotante es que es muy poco probable que sean iguales. Incluso 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) { ... En su pizarra, estos números son los mismos. Dentro de la computadora, no tienen por qué estarlo. Es extraño, pero tienes que acostumbrarte. METRO

MrPenguin9

Poster original
1 de agosto de 2008
  • 15 de mayo de 2009
Funcionó.

¡Gracias a todos por ayudarme!