Cita de: CalgaryCorpus en 31 Agosto 2018, 21:37 PM
Podria evitarse el overflow al convertir el angulo gigante en el pequeno equivalente, por ejemploCódigo (cpp) [Seleccionar]
float G2R(float g) {
while(g > 360) {
g -= 360;
}
return g*PI/180;
}
2 mejoras a esto:
- En vez de iterar restando 360, dividir por 360, y luego restar directamente la cantidad de veces que cabe 360 en el numero gigante.
- Algo similar hay que hacer para angulos negativos gigantes
Solo puedo decir una cosa : GENIAL.
No creo que sea un defecto por el posible overflow, (de hecho me parece que no hay overflow, como dije antes...) El algoritmo mismo exige 0 <= r <= 2pi
Propongo, para simplificar tantos positivos como negativos grandes, la macro
Código (c) [Seleccionar]
#define G2R(g) ((g%360)*PI/180)
Aunque el operador (%) solo admite int, y ni podamos meter "floats".
Código (c) [Seleccionar]
int g;
for ( ; cin >> g ; )
Ahora, tnemeos
Código [Seleccionar]
0 90 180 270 360
0 0.0000 0.0000
90 1.5708 1.0000
180 3.1416 0.0000
270 4.7124 -1.0000
360 0.0000 0.0000
0 -90 -180 -270 -360
0 0.0000 0.0000
-90 -1.5708 -1.0000
-180 -3.1416 -0.0000
-270 -4.7124 1.0000
-360 0.0000 0.0000
0 1170 1260 1350 1440 # I.e [0,90,180,270,360] + 360x3
0 0.0000 0.0000
1170 1.5708 1.0000
1260 3.1416 0.0000
1350 4.7124 -1.0000
1440 0.0000 0.0000
0 -1170 -1260 -1350 -1440
0 0.0000 0.0000
-1170 -1.5708 -1.0000
-1260 -3.1416 -0.0000
-1350 -4.7124 1.0000
-1440 0.0000 0.0000
Como Dios manda....
