En python " -45 % 360 " da 315, lo que me resultaría utilísimo a la hora de utilizar ANGLE. Pero en Bennu " -45 % 360 " da -45. Por que la diferencia?
360 + ( - 45 ) = 315
Quote from: Kloppix on June 30, 2012, 02:56:27 PM
En python " -45 % 360 " da 315, lo que me resultaría utilísimo a la hora de utilizar ANGLE. Pero en Bennu " -45 % 360 " da -45. Por que la diferencia?
kloppix, que criterios sigue eso que mencionas de python... no creo que python haga eso, eso que mencionas no tiene pies ni cabeza... me resulta raro que python tenga ese bug...
mira
splinter@splinter:/tmp> cat 1.c
#include <stdio.h>
int main(int argc, char*argv[])
{
printf( "%d\n", -45 % 360 );
}
splinter@splinter:/tmp> ./1
-45
splinter@splinter:/tmp>
Quote from: Rein (K´)ah Al-Ghul on June 30, 2012, 04:05:44 PM
360 + ( - 45 ) = 315
Si, me dí cuenta . Lo que me parecía curioso es que el mismo operador de diferentes resultados en 2 lenguajes.
Quote from: SplinterGU on June 30, 2012, 07:44:49 PM
kloppix, que criterios sigue eso que mencionas de python... no creo que python haga eso, eso que mencionas no tiene pies ni cabeza... me resulta raro que python tenga ese bug...
mira
En el intérprete de python ">>> -45%360" da como resultado -315. Busqué en internet y hay mucha gente preguntando lo mismo. Que por qué se comporta diferente a Java o C. Ejemplo (http://stackoverflow.com/questions/1907565/c-python-different-behaviour-of-the-modulo-operation (http://stackoverflow.com/questions/1907565/c-python-different-behaviour-of-the-modulo-operation)):
I've found some strange behaviour in python regarding negative numbers:
>>> a = -5
>>> a % 4
3
Could anyone explain what's going on?
------------------------Respuesta-------------
Unlike C or C++, Python's modulo operator (%) always return a number having the same sign as the denominator (divisor). Your expression yields 3 because
(-5) % 4 = (-2 × 4 + 3) % 4 = 3.
En resumen: El que se comporta raro no es Bennu sino Python.
a ver... el modulo es el resto de una division... nunca el resto de "-45 / 360" puede dar -315, por mas explicaciones que la gente de python le quiera dar... es imposible eso...
no le veo logica... para mi es un bug, que no entiendo como llegaron a hacerlo...
ni bennugd, ni C, ni java, ni basic, tiene ese comportamiento...
en fin, el resto de la division -15/360 da -15...
tal vez el "%" en python corresponda a otro operador en los demas lenguajes...
no, no, corresponde a modulo, pero con numeros negativos da problemas...
mira otra curiosidad... si pones
print -45%-360 da
-45!!!!
chan!!!
print 45%-360
da
-315
bueno, tras unas pruebas, esta seria la correcta implementacion de % para python...
#!/usr/bin/python
def sgn(a):
if (a==0):
return 0
return a/abs(a)
def mod(a,b):
return (abs(a)%abs(b))*(sgn(a))
print mod(-45,360)
print mod(45,360)
print mod(45,-360)
print mod(0,350)
print mod(350,350)
print mod(-350,350)
print mod(-351,350)
print mod(-349,350)
esto corresponde a lo mismo en C.
Estoy con SplinterGU, es un fallo de Python. El módulo es el resto de la división y tiene que dar un número del mismo signo y siempre menor que el divisor. No tiene sentido que dé la suma de los números. Leyendo en Stackoverflow dicen que Phyton usa una operación matemática diferente que no es el resto de la división que conocemos.