Why rational products are not correctly handled
Hi there. I've got a strange behavior on a very simple case. This is just a little code that generates two rationals (a priori) and ask to return their product and display it as a rational. I put that in a loop and got strange results however only time to time. it doesn't look to me that it's deterministic. Who can help understanding and why not how to do it properly. Thanks
for i in range(100):
n1=randint(0,6)
d1=randint(1,4)
n2=randint(1,100)
d2=randint(1,100)
exp1 = str(n1)+"/"+str(d1)+"*"+str(n2)+"/"+str(d2) + " = "
exp2 = eval("Rational(" + str(n1)+"/"+str(d1)+"*"+str(n2)+"/"+str(d2) +")")
print(exp1 + str(exp2))
ps: looks like the indentation is lost when I copy the code.
This is an edit. I thought may be a copy of some displays could help
1/3*3/11=1/11
2/1*11/43=22/43
4/1*65/37=260/37
2/4*19/23=19/46
6/3*51/86=51/43
1/4*100/65=5/13
3/3*4/40=1/10
1/1*78/88=39/44
1/3*56/80=205041934254272/878751146804023
4/2*12/14=12/7
0/1*85/2=0
6/3*72/94=72/47
1/1*72/41=72/41
5/3*48/14=40/7
6/3*80/4=40
4/3*88/15=352/45
0/3*71/67=0
5/2*88/93=220/93
4/4*43/39=43/39
4/3*77/54=71651876916793/37687026170521
6/1*100/40=15
0/3*61/90=0
6/2*19/96=19/32
1/4*15/23=15/92
0/3*82/96=0
3/2*71/52=213/104
Replace exp2 by
and use
To obtain repeatable results start from
@ achrzesz Thank you so much. however a bit frustrated as I didn't understood yet the why I got that random error.
I don't understand why are you using strings to define multiplication of rationals. In your exp2 the character "*" is used but it is not the sign of multiplication of rationals but a string
My version can be reformulated as follows
to answer your question, yes here "*" is just a string. For whatever reason, I first generate my expressions/formulas etc and then evaluate them. Your answer works fine ! Thank you