Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 2.5%3 -2.5%3 2%(-3) 2%3
- python 2.5 0.5 -1 2
- ruby 2.5 0.5 -1 2
- octave 2.5 0.5 -1 2
- graph 2.5 0.5 -1 2
- geogebra 2.5 0.5 2 2
- calc 2.5 -2.5 -1 2
- php 2.5 -2.5 2 2
- nodejs 2.5 -2.5 2 2
- GROUPE Amod
- x-floor(x/y)*y decript bien les lignes [2.5|0.5|-1|2]
- f(2.5,3.0) = 2.5
- f(-2.5,3.0) = 0.5
- f(2.0,-3.0) = -1.0
- f(2.0,3.0) = 2.0
- GROUPE Bmod
- x-floor(x/y)*y+(y*(sign(x)-1))/2 decript bien les lignes [2.5|-2.5|-1|2] **
- f(2.5,3.0) = 2.5
- f(-2.5,3.0) = -2.5
- f(2.0,-3.0) = -1.0
- f(2.0,3.0) = 2.0
- GROUPE Cmod
- x-floor(x/abs(y))*abs(y)+(abs(y)*(sign(x)-1))/2 decript bien les lignes [2.5,-2.5,2,2]
- f(2.5,3.0) = 2.5
- f(-2.5,3.0) = -2.5
- f(2.0,-3.0) = 2.0
- f(2.0,3.0) = 2.0
- GROUPE Dmod
- x-floor(x/abs(y))*abs(y) decript bien les lignes [2.5|0.5|2|2]
- f(2.5,3.0) = 2.5
- f(-2.5,3.0) = 0.5
- f(2.0,-3.0) = 2.0
- f(2.0,3.0) = 2.0
- ** un peu plus d'elements semblant montrer que calc implemente le modulo comme decript :
- >>> f = lambda x,y: x-floor(x/y)*y+(y*(copysign(1,x)-1))/2
- predictions python verification calc
- >>> f(-8,-4.5) # ; -8 % -4.5
- 1.0 # 1
- >>> f(-2,-2.5) # ; -2 % -2.5
- 0.5 # 0.5
- >>> f(2,-2.5) # ; 2 % -2.5
- -0.5 # -0.5
- >>> f(2,-4) # ; 2 % -4
- -2.0 # -2
- >>> f(-68.84,-4338.4) # -68.84 % -4338.4
- 4269.56 # 4269.56
- Amod = lambda x,y: x-floor(x/y)*y
- Bmod = lambda x,y: x-floor(x/y)*y+(y*(copysign(1,x)-1))/2
- Cmod = lambda x,y: x-floor(x/abs(y))*abs(y)+(abs(y)*(copysign(1,x)-1))/2
- Dmod = lambda x,y: x-floor(x/abs(y))*abs(y)
- testcase = [(0.0,1.0),(0.0,-1.0),(1.0,-1.0),
- (-1.0,-1.0),(9.0,91.5),(-3.8,7.0),
- (-66.0,53.75),(-66.0,-53.75),(-1.5,0.5),
- (900,-9000),(-900,-9000),(-900,9000)]
- expectations = map(lambda x: map(lambda u: x(*u),testcase),[Amod,Bmod,Cmod,Dmod])
- labels = ['Amod','Bmod','Cmod','Dmod']
- lines = map(lambda x: str(x)+' ',testcase)
- lines.insert(0,max(map(len,lines))*'-')
- for group in expectations:
- label = labels.pop(0)
- lines[0] += ' { %s } ' % label
- for i,result in enumerate(group):
- lines[i+1] += ('%s ' % result)
- for line in lines:
- print(line)
- ------------------ { Amod } { Bmod } { Cmod } { Dmod }
- (0.0, 1.0) 0.0 0.0 0.0 0.0
- (0.0, -1.0) 0.0 0.0 0.0 0.0
- (1.0, -1.0) 0.0 0.0 0.0 0.0
- (-1.0, -1.0) 0.0 1.0 -1.0 0.0
- (9.0, 91.5) 9.0 9.0 9.0 9.0
- (-3.8, 7.0) 3.2 -3.8 -3.8 3.2
- (-66.0, 53.75) 41.5 -12.25 -12.25 41.5
- (-66.0, -53.75) -12.25 41.5 -12.25 41.5
- (-1.5, 0.5) 0.0 -0.5 -0.5 0.0
- (900, -9000) -8100.0 -8100.0 900.0 900.0
- (-900, -9000) -900.0 8100.0 -900.0 8100.0
- (-900, 9000) 8100.0 -900.0 -900.0 8100.0
- python
- [0.0, 0.0, 0.0, 0.0, 9.0, 3.2, 41.5, -12.25, 0.0, -8100, -900, 8100]
- v v v v v v v v v v v v Amod
- php > $testcase = [[0,1],[0,-1],[1,-1],[-1,-1],[9,91.5],[-3.8,7],[-66,53.75],[-66,-53.75],[-1.5,0.5],[900,-9000],[-900,-9000],[-900,9000]];
- php > foreach ($testcase as $elem) {
- php { echo $elem[0].' '.$elem[1].' = '.fmod($elem[0],$elem[1])."\n";
- php { }
- 0 1 = 0 ok
- 0 -1 = 0 ok
- 1 -1 = 0 ok
- -1 -1 = -0 nok (-1)
- 9 91.5 = 9 ok
- -3.8 7 = -3.8 ok
- -66 53.75 = -12.25 ok
- -66 -53.75 = -15.25 ok
- -1.5 0.5 = -0 nok (-0.5)
- 900 -9000 = 900 ok
- -900 -9000 = -900 ok
- -900 9000 = -900 ok
- -> Cmod mal defini ou nouveau groupe
- irb(main):001:0> 0.0 % 1.0
- => 0.0 ok
- irb(main):002:0> 0.0 % -1.0
- => 0.0 ok
- irb(main):003:0> 1.0 % -1.0
- => 0.0 ok
- irb(main):004:0> -1.0 % -1.0
- => -0.0 ok (-0.0 ?)
- irb(main):005:0> 9.0 % 91.5
- => 9.0 ok
- irb(main):006:0> -3.8 % 7.0
- => 3.2 ok
- irb(main):007:0> -66.0 % 53.75
- => 41.5 ok
- irb(main):001:0> -66.0 % -53.75
- => -12.25 ok
- irb(main):008:0> -1.5 % 0.5
- => -0.0 ok (-0.0 ?)
- irb(main):009:0> 900.0 % -9000.0
- => -8100.0 ok
- irb(main):010:0> -900.0 % -9000.0
- => -900.0 ok
- irb(main):011:0> -900.0 % 9000.0
- => 8100.0 ok
- => conforme avec Amod
- geogebra :
- 0.00000000000000 1.00000000000000 0.00000000000000 ok
- 0.00000000000000 -1.00000000000000 0.00000000000000 ok
- 1.00000000000000 -1.00000000000000 0.00000000000000 ok
- -1.00000000000000 -1.00000000000000 0.00000000000000 ok
- 9.00000000000000 91.5000000000001 9.00000000000000 ok
- -3.80000000000000 7.00000000000000 3.20000000000000 ok
- -66.0000000000000 53.7500000000001 41.5000000000000 ok
- -66.0000000000000 -53.7500000000001 41.5000000000000 ok
- -1.50000000000000 0.500000000000001 0.00000000000000 ok
- 900.000000000000 -9000.00000000000 900.000000000000 ok
- -900.000000000000 -9000.00000000000 8100.00000000000 ok
- -900.000000000000 9000.00000000000 8100.00000000000 ok
- => conforme avec Dmod
- Calc
- ; 0 % 1
- 0 ok
- ; 0.0 % -1.0
- 0 ok
- ; 1.0 % -1.0
- 0 ok
- ; -1.0 % -1.0
- 0 nok (1)
- ; 9.0 % 91.5
- 9 ok
- ; -3.8 % 7.0
- -3.8 ok
- ; -66.0 % 53.75
- -12.25 ok
- ; -66.0 % -53.75
- 41.5 ok
- ; -1.5 % 0.5
- 0 nok (-0.5)
- ; 900.0 % -9000.0
- -8100 ok
- ; -900.0 % -9000.0
- 8100 ok
- ; -900.0 % 9000.0
- -900 ok
- => irregularités avec Bmod ... mon modele est probablement faux
- nodejs
- > 0.0 % 1.0
- 0 ok
- > 0.0 % -1.0
- 0 ok
- > 1.0 % -1.0
- 0 ok
- > -1.0 % -1.0
- -0 nok (-1)
- > 9.0 % 91.5
- 9 ok
- > -3.8 % 7.0
- -3.8 ok
- > -66.0 % 53.75
- -12.25 ok
- > -66.0 % -53.75
- -12.25 ok
- > -1.5 % 0.5
- -0 nok (-0.5)
- > 900.0 % -9000.0
- 900 ok
- > -900.0 % -9000.0
- -900 ok
- > -900.0 % 9000.0
- -900 ok
- => toujours les memes irregularites avec Cmod, mon modele EST proche mais faux
- graph
- 0 1 0 ok
- 0 -1 0 ok
- 1 -1 0 ok
- -1 -1 0 ok
- 9 91.5 9 ok
- -3.8 7 3.2 ok
- -66 53.75 41.5 ok
- -66 53.75 -12.25 ok
- -1.5 0.5 0 ok
- 900 -9000 -8100 ok
- -900 -9000 -900 ok
- -900 9000 8100 ok
- => conforme a Amod
- octave:1> mod(0,1)
- ans = 0 ok
- octave:2> mod(0,-1)
- ans = 0 ok
- octave:3> mod(1,-1)
- ans = 0 ok
- octave:4> mod(-1,-1)
- ans = 0 ok
- octave:5> mod(9,91.5)
- ans = 9 ok
- octave:6> mod(-3.8,7)
- ans = 3.2000 ok
- octave:7> mod(-66,53.75)
- ans = 41.500 ok
- octave:8> mod(-66,-53.75)
- ans = -12.250 ok
- octave:9> mod(-1.5,-0.5)
- ans = 0 ok
- octave:10> mod(900,-9000)
- ans = -8100 ok
- octave:11> mod(-900,-9000)
- ans = -900 ok
- octave:12> mod(-900,9000)
- ans = 8100 ok
- => conforme a Amod
- Attendu Obtenu
- python Amod 12 predictions obtenus sur 12
- ruby Amod 12 / 12
- octave Amod 12 / 12
- graph Amod 12 / 12
- geogebra Dmod 12 / 12
- calc Bmod 10 / 12 (-1.0 % -1.0 = 0 [predit 1], -1.5 % 0.5 = 0 [predit -0.5])
- php Cmod 10 / 12 (-1.0 % -1.0 = 0 [predit -1], -1.5 % 0.5 = 0 [predit -0.5])
- nodejs Cmod 10 / 12 (-1.0 % -1.0 = 0 [predit -1], -1.5 % 0.5 = 0 [predit -0.5])
- conclusion:
- Amod probablement juste.
- Dmod probablement juste (mais a tester mieux).
- Bmod et Cmod probablement proches, mais comportent une erreur nettement definis definis, les cas d'echec etant les memes pour chaque implementations testes.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement