Merge branch 'master' of hpgcc3.org:newrpl

This commit is contained in:
claudiol 2019-03-08 18:06:24 -05:00
commit 25e34bd9d3
2 changed files with 27 additions and 16 deletions

View file

@ -89,12 +89,26 @@ R → A<fraction>"
'INV(1):→1' @ ELIMINATE OPERATION ON ONE
'INV(-.xX):→-1*INV(.xX)' @ MAKE NEGATION A SCALAR MULTIPLICATION
'1*.XX:→.XX' @ REMOVE MULTIPLY BY ONE
'.XX^1:→.XX' @ REMOVE EXPONENT OF 1
'.xX^1:→.xX' @ REMOVE EXPONENT OF 1
'0*.XX₃:→0' @ MULTIPLY ANYTHING BY ZERO IS ZERO AS LONG AS IT ISN'T INFINITY (FINITE REALS)
'0*.XX₅:→0' @ MULTIPLY ANYTHING BY ZERO IS ZERO AS LONG AS IT ISN'T INFINITY (FINITE COMPLEX)
'.xX₃₁^0:→1' @ ONLY VALID FOR NON-ZERO FINITE REALS
'.xX₅₁^0:→1' @ ONLY VALID FOR NON-ZERO FINITE COMPLEX
'.vX₂*(.xA+.XB):→.vX₂*.xA+.vX₂*.XB' @ DISTRIBUTE REAL VARIABLES TO MAKE POLYNOMIALS LOOK BETTER
'.vX₄*(.xA+.XB):→.vX₄*.xA+.vX₄*.XB' @ DISTRIBUTE COMPLEX VARIABLES TO MAKE POLYNOMIALS LOOK BETTER
'.mX*.mX:→.mX^2' @ MULTIPLICATION TO POWER CONVERSION (NON-COMMUTATIVE)
'.mX*.mX^.NN₃₂₁:→.mX^(1+.NN)' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'.mX^.NN₃₂₁*.mX:→.mX^(.NN+1)' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'.mX^.NM₃₂₁*.mX^.NN₃₂₁:→.mX^(.NM+.NN)' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'INV(.mX)*INV(.mX):→INV(.mX^2)' @ MULTIPLICATION TO POWER CONVERSION (NON-COMMUTATIVE)
'INV(.mX)*INV(.mX^.NN₃₂₁):→INV(.mX^(1+.NN))' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'INV(.mX^.NN₃₂₁)*INV(.mX):→INV(.mX^(.NN+1))' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'INV(.mX^.NM₃₂₁)*INV(.mX^.NN₃₂₁):→INV(.mX^(.NM+.NN))' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'.MN*.mX+.MM*.mX:→(.MN+.MM)*.mX' @ ASSOCIATE TO THE LEFT (NON-COMMUTATIVE)
'.MN*.mX+.mX:→(.MN+1)*.mX' @ ASSOCIATE TO THE LEFT (NON-COMMUTATIVE)
'.mX*.MN+.mX*.MM:→.mX*(.MN+.MM)' @ ASSOCIATE TO THE RIGHT (NON-COMMUTATIVE)
@ -108,15 +122,11 @@ R → A<fraction>"
'.xX+.xX:→2*.xX' @ ADD TERMS WITH NO NUMERIC FACTOR
'.mX*.mX:→.mX^2' @ MULTIPLICATION TO POWER CONVERSION (NON-COMMUTATIVE)
'.mX*.mX^.NN₃₂₁:→.mX^(1+.NN)' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'.mX^.NN₃₂₁*.mX:→.mX^(.NN+1)' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'.mX^.NM₃₂₁*.mX^.NN₃₂₁:→.mX^(.NM+.NN)' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'INV(.mX)*INV(.mX):→INV(.mX^2)' @ MULTIPLICATION TO POWER CONVERSION (NON-COMMUTATIVE)
'INV(.mX)*INV(.mX^.NN₃₂₁):→INV(.mX^(1+.NN))' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'INV(.mX^.NN₃₂₁)*INV(.mX):→INV(.mX^(.NN+1))' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'INV(.mX^.NM₃₂₁)*INV(.mX^.NN₃₂₁):→INV(.mX^(.NM+.NN))' @ MULTIPLICATION TO POWER, AS LONG AS EXPONENTS ARE POSITIVE INTEGER REALS (NON-COMMUTATIVE)
'.mX₂₁*INV(.mX₂₁):→1' @ CANCEL OUT TERMS WITHOUT ANY EXPONENTS (COMMUTATIVE, REALS ONLY, NON-ZERO)
'.mX₄₁*INV(.mX₄₁):→1' @ CANCEL OUT TERMS WITHOUT ANY EXPONENTS (COMMUTATIVE, COMPLEX ONLY,NON-ZERO)
}
@ GROUP 3 = CANCEL TERMS IN DIVISION (MAY REMOVE POLES)
@ -126,14 +136,15 @@ R → A<fraction>"
'.mX₂*INV(.mX₂):→1' @ CANCEL OUT TERMS WITHOUT ANY EXPONENTS (COMMUTATIVE, REALS ONLY)
'.mX₄*INV(.mX₄):→1' @ CANCEL OUT TERMS WITHOUT ANY EXPONENTS (COMMUTATIVE, COMPLEX ONLY)
'.mX^.xN*INV(.mX^.xM):→.mX^(.xN-.xM)' @ CANCEL OUT TERMS WITH EXPONENTS (NON-COMMUTATIVE)
'.mX₆^.xN*INV(.mX₆^.xM):→.mX₆^(.xN-.xM)' @ CANCEL OUT TERMS WITH EXPONENTS (NON-COMMUTATIVE)
'INV(.mX₆^.xN)*.mX₆^.xM:→.mX₆^(.xM-.xN)' @ CANCEL OUT TERMS WITH EXPONENTS (NON-COMMUTATIVE)
'.xX₂^.xN*INV(.xX₂^.xM):→.xX^(.xN-.xM)' @ CANCEL OUT TERMS WITH EXPONENTS (COMMUTATIVE, ONLY ACCEPT REAL VARIABLES)
'.xX₄^.xN*INV(.xX₄^.xM):→.xX^(.xN-.xM)' @ CANCEL OUT TERMS WITH EXPONENTS (COMMUTATIVE, ONLY ACCEPT COMPLEX VARIABLES)
'.mX^.xN*INV(.mX):→.mX^(.xN-1)' @ CANCEL OUT TERMS WITHOUT EXPONENT IN DENOMINATOR (NON-COMMUTATIVE)
'.mX^.xN*INV(.mX):→.mX^(.xN-1)' @ CANCEL OUT TERMS WITHOUT EXPONENT IN DENOMINATOR (NON-COMMUTATIVE)
'.xX₂^.xN*INV(.xX₂):→.xX^(.xN-1)' @ CANCEL OUT TERMS WITHOUT EXPONENT IN DENOMINATOR (COMMUTATIVE, ONLY REALS)
'.xX₄^.xN*INV(.xX₄):→.xX^(.xN-1)' @ CANCEL OUT TERMS WITHOUT EXPONENT IN DENOMINATOR (COMMUTATIVE, ONLY COMPLEX)
'.mX*INV(.mX^.xM):→.mX^(1-.xM)' @ CANCEL OUT TERMS WITHOUT EXPONENT IN NUMERATOR (NON-COMMUTATIVE)
'.mX*INV(.mX^.xM):→.mX^(1-.xM)' @ CANCEL OUT TERMS WITHOUT EXPONENT IN NUMERATOR (NON-COMMUTATIVE)
'.xX₂*INV(.xX₂^.xM):→.xX^(1-.xM)' @ CANCEL OUT TERMS WITHOUT EXPONENT IN NUMERATOR (COMMUTATIVE, REALS)
'.xX₄*INV(.xX₄^.xM):→.xX^(1-.xM)' @ CANCEL OUT TERMS WITHOUT EXPONENT IN NUMERATOR (COMMUTATIVE, REALS)

View file

@ -3266,7 +3266,7 @@ do {
// CHECK IF THIS IS ANOTHER SPECIAL IDENT AND BREAK THE INFINITE LOOP
if( (((tmp[1])&0xffff) == TEXT2WORD('.','X',0,0))||(((tmp[1])&0xffff) == TEXT2WORD('.','M',0,0))) {
// ALSO CHECK IF IT'S THE SAME VARIABLE USED LATER, THAT DOESN'T COUNT
if(!rplCompareIDENT(*s.right,tmp)) {
if(rplCompareIDENT(*s.right,tmp)) {
// BREAK THE LOOP, JUST ASSIGN THE CURRENT ARGUMENT
BINT attr=rplGetIdentAttr(*s.right);
@ -3559,7 +3559,7 @@ do {
// CHECK IF THIS IS ANOTHER SPECIAL IDENT AND BREAK THE INFINITE LOOP
if( (((tmp[1])&0xffff) == TEXT2WORD('.','X',0,0))||(((tmp[1])&0xffff) == TEXT2WORD('.','M',0,0))) {
// ALSO CHECK IF IT'S THE SAME VARIABLE USED LATER, THAT DOESN'T COUNT
if(!rplCompareIDENT(*s.right,tmp)) {
if(rplCompareIDENT(*s.right,tmp)) {
// BREAK THE LOOP, JUST ASSIGN THE CURRENT ARGUMENT
BINT attr=rplGetIdentAttr(*s.right);
@ -5470,8 +5470,8 @@ BINT rplSymbGetAttr(WORDPTR object)
// SET DEFAULT ATTRIBUTES FOR VARIABLES THAT DON'T HAVE THEM (REAL IN REAL MODE, COMPLEX IN COMPLEX MODE)
if(!attr) {
if(rplTestSystemFlag(FL_COMPLEXMODE)) attr=IDATTR_ISINFCPLX;
else attr=IDATTR_ISINFREAL;
if(rplTestSystemFlag(FL_COMPLEXMODE)) attr=IDATTR_ISCPLX;
else attr=IDATTR_ISREAL;
}
return attr;