2016-03-03 45 views
5

ciao Devo calcoli differenziali in gradi e ho il seguente codice ma non mi restituiscono i valori esatti. L'unico diritto è il valore di sin90 in grado = 1funzioni trigonometriche rapide (cos, tan, arcoseno, arcos, arcano)

//////***** DEGREES ******////// 
var sinus = sin(90.0 * M_PI/180) 
var cosinus = cos(90 * M_PI/180) 
var tangent = tan(90 * M_PI/180) 

var arcsinus = asin(90 * M_PI/180) 
var arcosinus = acos(90 * M_PI/180) 
var arctangent = atan(90 * M_PI/180) 

Qual è l'operazione giusta per restituire il valore esatto per ogni operazione in gradi per cos, tan e le loro funzioni ARC?

+0

'sin' e il resto prendono _angle in radians_ come argomento. Perché fai questa roba '90 * 180/M_PI' nella seconda parte? – courteouselk

+0

potresti scrivere la tua risposta in un pezzo di codice per il valore di 90? perché non capisco davvero cosa intendi .. :) scusa sono nuovo @AntonBronnikov – kepi

risposta

10

Questo è più un problema di matematica che un problema Swift:

let sinus = sin(90.0 * M_PI/180) 
print("Sinus \(sinus)") 

let cosinus = cos(90 * M_PI/180) 
print("Cosinus \(cosinus)") 

let tangent = tan(90 * M_PI/180) 
print("Tangent \(tangent)") 

stampe

Sinus 1.0 
Cosinus 6.12323399573677e-17 
Tangent 1.63312393531954e+16 

seno di 90 gradi è 1 (corretto)

Cosinus di 90 gradi è 0. Il valore 6e-17 è un valore molto piccolo, qualsiasi arrotondamento ragionevole lo considererebbe uguale a zero (corretto). Il fatto che non sia possibile ottenere esattamente lo zero è dovuto a errori di arrotondamento nel calcolo.

La tangente di 90 gradi non è definita (sin/tan = 1/0, la divisione per zero non è definita). Se avessimo calcoli precisi, probabilmente otterresti un infinito. In questo caso abbiamo 1 diviso per 6e-17, che diventa un numero elevato 1.6e16. Il risultato è corretto.

Per quanto riguarda le funzioni inverse, notare una cosa: i loro parametri non sono né in gradi né in radianti. Il loro risultato è in gradi/radianti, ad esempio:

let arcsinus = asin(1.0) * 180/M_PI 
print("Arcsinus \(arcsinus)") 

stampe

Arcsinus 90.0 
+0

grazie mille !!!! – kepi

+0

quindi, non devo cambiare qualcosa? Il mio codice è giusto così com'è? @Sulthan? Un modo per tornare e visualizzare il valore giusto sul display? – kepi

+0

@kepi I tuoi risultati sono corretti, per visualizzarli agli utenti, devi prima convertirli in stringhe. Suggerirei 'NSNumberFormatter' che gestirà l'arrotondamento e la formattazione per te. – Sulthan