Home

XLOP v 0.25 User Manual

image

Contents

1. Note that this way of doing don t work when decimal separator is be tween braces since macro opprint var contain such braces In this case the simplest is to use opexport macro see pagel25 45 Appendix C Future Versions Version of xlop package is 0 25 which is only a debuging version of ver sion 0 2 which is itself a correcting version of version 0 1 first public re lease The next release will be version 0 3 and its stable version will be version 0 4 The features of version 0 3 aren t definitively fixed but there are some points planned international version for pos es op rations from 2 to 36 basis additional high level functions with roots oproot for any roots and opsqrt for square root exponential function logarithm trigono metric functions direct inverse hyperbolic macro to have a formated writing that is write a number where length of decimal part and integer part are given if these widths are not the ones of the number there will be overflow or filling this macro was present in version 0 1 and allow to display numbers decimal aligned right aligned or left aligned macro for addition with more than two operands parameter for scientific or engineer notation macro to allow to write a multi line number and or with thousand separator carries for multiplications make public the successive remainders of a division negative values ofmaxdivstep and safedivstep parameters
2. newcommand hole 1 bullet 11 opadd operandstyle 1 1 hole cf 48 o operandstyle 1 2 hole e 27 5 operandstyle 2 3 hole 1e 3 39 resultstyle 2 hole 45 89 127 5 When the style is a macro with argument this one is the figure Here is a more complicated example using pst node package of the pstricks bundle source newcommand OPoval 3 dimen1 2 opcolumnwidth ovalnode 1 kern dimenl 3 kern dimen1 opadd voperation top operandstyle 1 1 O0Poval A 0 a eure operandstyle 2 2 0Poval C 0 8 EE number 45 172 qquad 717 begin minipage t 2cm pnode 0 0 2em B figure ncarc gt A B par pnode 0 0 2em D number ncarc lt D C end minipage As for figures the decimal separator take account to number style To ac cess individually to the decimal separator style you have to use d index numeric indexes are for figures 10 2 4 6 source 3 5 7 newcommand hole 1 texttt _ EIE opmul intermediarystyle hole resultstyle hole resultstyle d white 2 46 35 7 11 Chapter 3 Arithmetic Operations 3 1 Addition Addition is deal by the Vopadd macro When it is in display mode it display only nonnegative numbers Then it displays a substraction when one of the operands is nonpositive 7 245 source 72 opadd 245 72 173 In a general manner the principle is to display the operation that allows to find the result as you make it by hand On the
3. hbox box2 hbox opdisplay intermediarystyle the count255 P the primeindex fi opcopy q NbtoDecompose advance count255 byl setboxl vtop hbox box1 hbox opdisplay operandstyle the count255 NbtoDecompose 3 else advance primeindex byl fi repeat hbox box1 kern0 5 opcolumnwidth opvline 0 0 75 the count255 25 kern0 5 opcolumnwidth box2 fi endgroup getprime 20 primedecomp operandstyle 2 red intermediarystyle 2 red 252 252 126 63 21 N WW PD ND Note the use of group for the whole macro in order to protect xlop param eter modifications Note also that void parameter aren t allowed It s not a bug it s a feature Author thinks that a user who write brackets without any thing between these brackets is going to make a mistake To obviate this 43 prohibition there is the particular parameter nil which has exactly this role Finally note the trick setbox2 box2 to obtain a void box register and final manipulations to show the vertical rule in a easy to read way The second example allow to calculates a continued fraction like 1 ag ay t aa 1 a3 giving the sequence ao 41 a2 a3 to the macro This example gives frac tions corresponding to gold number and square root for 2 and 3 source begingroup long gdef continuedfraction 1 2 Llet mirror relax for op Nb 1 do ifx mirror relax edef mirror op
4. ged 22 33 opprint r Chapter 2 xlop Instructions Except some macros which will be examined later the xlop s macros can have an optional argument between squared braces in order to localy mod ify parameter s values The other arguments mandatory are nearly al ways numbers The two sections of this chapter describe in details what is a number for xlop and how use parameters 2 1 Inthe Beginning Was the Number 2 1 1 Size Before we see the general syntax of number we examin the very particular xlop feature the ability to deal with arbitrary sized number To be precise the theoric maximum size of a number is 23 1 digits In practice this limit can t be reached for two essential reasons The first one is that a multiplication with two numbers with 2 digits needs more than 7000 years to be performed on the author computer The second one is more restrictive because it is linked to TpX stack size limits Here is a table showing a TEX compilation for a multiplication with two operands of same size on a linux computer pentium II 600 and 256 Mb RAM Fcompilationtime ts 2 8 18 32 36 crash The crash in the table is due to an overstack for hash table On BIEX the limit before crash will be reduced These tests are made on a min imal file With a typical document this limit will be reduced too The spool size is another limit quickly reached To typeset this document which contain many ca
5. 1 2 8 1 2 8 251328 251328 62832 62832 31416 31416 40 21248 40 21248 For displayed multiplication the deletezero parameter is only for operands The result keeps its non significant zeros since there are necessary in order to make a correct dot shifting when we work by hand source opmul deletezero false 01 44 25 qquad opmul 01 44 25 01 44 x 44 25 25 0720 720 0288 288 03 6 00 3 6 0 0 In the other hand this parameter has its usual behaviour in inline multipli cation source opmul deletezero false style text 01 44 25 qquad opmul style text 01 44 25 01 44 x 25 036 00 1 44 x 25 36 34 Division The xlop package deals with normal division via opdiv macro and with euclidean division via opidiv macro Division is a very complex operation so it is not strange that there are many parameters to control it Pay attention that the xlop package v 0 25 is unable to deal with en glish division In this package version the division is the french one which is more or less used as it in some other countries The xlop package v 0 3 will allow enlish division and many more feautures 17 3 4 1 End Control In the following text term step means the set of process which allow to get one digit for the guotient This number of steps is not only under the control of maxdivstep safedivstep and period parameters It is only partially true because a classical division wi
6. 124 7x184 2 opidiv style text 124 7 This condition for remainder is valid even with non integer divisor source 1 24 0 7 x 1 0 54 opidiv style text 1 24 0 7 par 1 24 0 7 x 1 0 54 opidiv style text 1 24 0 7 par 1 24 0 7 x 2 0 16 opidiv style text 1 24 0 7 par 1 24 0 7 x2 0 16 opidiv style text 1 24 0 7 22 Chapter 4 Other Commands 4 1 Starred Macros The five macros seen in previous chapter have a starred version These starred macros perform the calculation and don t display anything Result is record in a variable given as argument Since these commands don t display anything parameters dont make sens and aren t allowed for Vopadds Vopsubs Vopmul s and opidiv In the other hand parameters maxdivestep safedivstep and period in fluence calculations then Vopdiv macro accepts an optional argument to take account of them source opmuls 2 2 a 256 1 257 opmul a a a opmul a a a opadd style text a 1 For macros opdiv and opidiv there are two extra arguments to record quotient and final remainder source opdiv maxdivstep 1 88 16 q r 16 x 5 80 opmul q 16 bq 80 8 88 opmul style text 16 q par opadd style text bq r 4 2 Input Output The opcopy macro copies its first argument into its second one Then the first argument is a number write in decimal form or via a variable w
7. Nb else edef mirror op Nb mirror fi 3 let Op result relax for op Nb mirror do ifx Op result relax opcopy op Nb result else opexpr op Nb 1 result result fi 3 opcopy result 2 endgroup continuedfraction 1 1 1 1 1 1 1 1 1 1 1 1 r opprint r quad continuedfraction 1 2 2 2 2 2 2 2 2 2 2 2 r opprint r quad continuedfraction 1 1 2 1 2 1 2 1 2 1 2 1 r opprint r 1 618055555 1 414213564 1 732051282 It does no harm just this once we use BIEX commands for the loop B 3 Direct Access to Number When a number is saved in a xlop variable it is possible to process with it in many different ways However in certain situations you would creat you own macro or use external macro giving such numbers as parameter 44 Giving directly opprint var is ineffective since this macro is a com plex a gives side effect It is necessary to access directly to this number When a variable hold a number xlop creates a macro Op var which con tain this number Note the uppercase O and the lowercase p The at sign is here to do this definition a private one that is you have to enclose it with makeatletter and makeatother to access it or catcode 11 in TeX source opcopy 1234 a opcopy 56 b opmul a b r makeatletter 1234 newcolumntype D 1 56 begin tabular 1 amp Op a ee times amp Op b amp Op r end tabular makeatother
8. before any use of a xlop macro Otherwise there will be bugs hard to fix Let s resume the hour display macro see at section 4 2 But now we check if argument is between 0 include and 1440 exclude then we pro cess tests in order to know if hour is plural or not as for minute source newcommand hour 1 opcmp 1 0 ifopge opcmp 1 1440 ifoplt opidiv 1 60 h m opprint h hour 26 opcmp h 1 ifopgt s fi opcmp m 0 ifopneq space opprint m minute opcmp m 1 ifopgt s fi fi fi fi hour 60 hour 1080 hour 1081 hour 1082 1 hour 18 hours 18 hours 1 minute 18 hours 2 minutes 4 5 Advanced Operations The macros left to be examined are either internal macros and which it will be a shame to keep private or macro asked for users Internal macros are Vopgcd which gives gcd of two numbers and macro opdivperiod which gives the period length of quotient of two numbers For efficiency reason these macros don t use xlop number they rather use numbers directly understand by TEX There are two consequences the numbers can t be greater than 2147483647 for Vopgcd it cant be greater than 214748364 for opdivperiod A warning is displayed for an overflow Result is put in the third parameter There is also some checks on the two first parameters a gcd must not have null argument length of period can t be processed with null quotient Futhermore if an arg
9. decimalsepwidth 8 deletezero 7 13 417 displayintermediary 16 20 displayshiftintermediary dividendbridge 21 divsymbol 6 egualsymbol 6l 18 20 hfactor 17 hrulewidth 8 20 24 intermediarystyle 9 lastcarry 12 14 lineheight 8 24 maxdivestep 23 maxdivstep mulsymbo1 6 49 nil ldd offsetcarry 14 opcolumnwidth 4 operandstyle 9 opgetdecimaldigit 26 opgetdigit 26 opgetintegerdigit 26 opsetdecimaldigit 26 opsetdigit 26 opsetintegerdigit 26 parenthesisnegative 7 period 18 19 22231 30 remainderstyle 9 resultstyle 9 safedivstep shiftdecimalsep 21 22 shiftintermediarysymbol strikedecimalsepsymbol 21 style 7 subsymbol 6 voperation 6 voperator 6 vruleperiod 20 vrulewidth 8 24 boolean 12 index SHI local modification 43 syntax BHII void 44 with or 6 parameter table of 36H39 parenthesisnegative d period 18 19 223130 product of prime factors 41 pstricks 9 pstricks 2 remainderstyle 9 resultstyle 9 safedivstep 18 19 221 23 30 46 shiftdecimalsep 21 22 shiftintermediarysymbol 15 spool size 4 strikedecimalsepsymbol 21 style d subsymbol 6 syntax BNE B time 23 time calculation voperation 6 voperator 6 vruleperiod 20 vrulewidth 8 24 50
10. like this e A 1etB 9 for one digit e A 12 et B 98 for two digits A 123 et B 987 for three digits e A 12345 et B 98765 for five digits e A 1234567890 et B 9876543210 for ten digits tIn fact these measures was done in 2004 when the 0 2 version was released Author is somewhere lasy and he doesn t measure with his new computer more efficient 32 e A 12345678901234567890 et B 98765432109876543210 for twenty digits Here is results some comments follow opadde B a r opsubs B AHr opmul B A r 5 0 66 85 132 303 Ee opdive AHBH ay Vopdive B Ag D opdiv maxdivstep 5 A B q r opdiv maxdivstep 5 B A q r opidive B aHa r It is normal that inversion of operands don t have sensible influence for addition Then it could be strange that there is influence for substraction In fact when the second operand is bigger than the second one there is additional process double inversion operation on the sign of the result It is normal that division time is greater than the multiplication one It could be abnormal that division seems catch up In fact the multiplica tion complexity grows quickly with the operand length In the other hand division complexity is stopped by maxdivstep parameter It is clear on ex ample where there is only five steps Some results seems odd For instance opdiv 9 1 q r is very fast These is due to the one digit quotient opdiv 12
11. need to protect the end of line with a Macros ophline and opvline complete the previous ones to give all the tools the user needs to build its own operations ophline allows to draw a horizontal rule its length is given by the parameter after coordi nates opvline does the same for vertical rules Remember that param eters hrulewidth and vrulewidth indicate the thickness of these rules source par vspace 2 oplineheight oplput 1 2 0 oplput 2 2 N oplput 3 2 E oplput 0 1 5 oplput 1 1 0 oplput 2 1 N oplput 3 DIE ophline 0 0 8 4 oplput 1 0 T oplput 2 0 W oplput 3 0 0 ONE ONE T WO 24 Macro opexport allow to export a number in a macro It s an extra to version 0 23 which is very usefull to exchange datas between xlop and the outside world The first argument is a number in the xlop sense that is either a number write with figures or a variable name The number is trans lated in a form directly acceptable for TEX and hold in the second argument which should be a macro name However note that decimal separator will be the one specified by decimalsepsymbol without its possible braces source opmul 5 3 141592654 F macro gt 15 70796327 opexport F fivepi texttt meaning fivepi We can use this macro to typeset numbers calculated by xlop in an array with a decimal alignment or to initialize a counter or a length don t forget the unit in the
12. period search Its default value is ldots The equalsymbol parameter indicates the symbol used for equality Its default value is In fact this parameter is defined with source opset equalsymbol that is with braces in order to protect the equal sign Without theses braces there will be a compilation error You have to process like that when there is an equal sign or a comma in the value The parameter approxsymbol indicates the symbol used for approxi mations Its default value is approx The parameter decimalsepsymbol indicates the symbol used for the decimal separator Its default value is a dot Parameters addsymbol subsymbol mulsymbol and divsymbol indi cate the symbols used for the four arithmetic operations The default value are times et div respectively 2 2 2 General Displaying The voperation parameter indicates the way a dispayed operation is put with respect to the baseline The possible values are top center and bottom the latter one is the default value 1 top 45 t172 source 217 top quad 1 opadd voperation top 45 172 par i 45 center quad center 172 opadd voperation center 45 172 par 217 bottom quad l opadd voperation bottom 45 172 45 aara bottom 217 The voperator parameter indicates how the operator symbol is put with repect to operands The possible values are top center default value and bottom 45 172 EE source top 217 t
13. played operations The value top put operator at the level of first operand The value bottom put operator at the level of second operand The value center put operator between operands hfactor decimal Sort of operands alignement for dis played operation The value decimal in dicates an alignement on decimal sep arator The value right indicates a flushright alignement Vertical position of rule which indicates vruleperiod period of quotient for inline division dividendbridge Indicates if there is a bridge above div idend shiftdecimalsep both Indicates how shift decimal separator into operands for a displayed division The value both indicates that shifting are made on both divisor and dividend in order to make integer numbers The value divisor indicates that the shifting must give an integer divisor The value none indicates that there is no shifting safedivstep 50 Maximal number of steps in division Sete O fonen treis a perdoa corean Co period false Indicates if division must be stoped P O nen asnale period id deletezero true Indicates that non significant zeros are eee ES ase tanse orate ee to be continued 37 nonzero displayintermediary lastcarry parenthesisnegative lineheight baselineskip decimalsepwidth decimalsepoffset hrulewidth Indicates that carries are displayed Indicates that carries are displayed Horizontal offset for carries into dis Indicates tha operation are
14. pos sibility to have a name using macro could seem useless but it is not true For instance you can realize loops with names as r1 r2 r lt n gt using the code r the cpt as variable name where cpt is a counter in the TEX meaning With BIFX the code is more verbose with r number value cpt where cpt is now a BIEX counter We will see an example using this syntax in the section B 2 page 41 In practice what does it mean all these rules First they means that a number writes in a decimal form can be preceded by any sequence of plus or minus signs Obviously if there is a odd number of minus signs the number will be negative Next a decimal number admits only one decimal separator symbol which can be a dot or a comma this one can be put any where in the number Finally a number is write in basis 10 Be carefull these rules mean that a is not valid The package uses some private names and it is safe to not begin a vari able name with the character 2 2 xlop Parameters Parameter assignments are local to the macro when they are indicated in the optional argument To make global a parameter assignment you have to use the Vopset macro For example source opset decimalsepsymbol give the comma as decimal separator symbol for the whole document at least until another redefinition with opset 2 2 1 Symbols The afterperiodsymbol parameter indicates the symbol that follows a quotient in line in a division with
15. this manual we use pstricks package In fact the management of these styles is even more powerfull since you can distingish different number of a same class In one operation you have several operands and possibly several remainders and several inter mediary numbers You can access to the style of these numbers adding an index to the matching style source opadd operandstyle blue operandstyle 1 lightgray resultstyle red 1 1 275 173 39 carrystyle scriptsize green 45 89 127 5 In this example we indicate that the first operand must be typesetted with the lightgray style We don t indicate anything for the second operand so it takes the basic style for its class Then with blue style 9 This mechanism is even more powerfull since you can write two level index for operands carries and intermediary numbers one level for result and carry in order to access to each style figure of these numbers To sim plify index a positive index indicates the rank of a figure in the integer part right to left order index 1 is for the unit figure and a negative index indi cates the rank of a figure in the decimal part left to right order 1 is for the tenth figure source opadd operandstyle 1 1 white 11 operandstyle 1 2 white 04 8 operandstyle 2 3 white 27 50 resultstyle 2 white 1 3 39 deletezero false 045 89 127 50 You can also use a macro with one parameter as a style source
16. we have to study is Vopexpr It calculates a com plex expression This macro needs two parameters the first one is the ex pression in infix form the natural one for human the second one is the variable name where the result is stored Initially expression must have been polish one for instance notation used on old HP calculator or PostScript language but another work with Christophe Jorssen has given the actual form for expression in xlop more pleasant for users Formulas accept usual arithmetic operators and They accept also operator for euclidian division and A for power The operator has both r le of substraction and unary operator for opposite The has also these r les here the unary operator do nothing Operands are written in decimal form or via variable name However opexpr introduces a restric tion about variable name since variable names must be different to func tion names recognized by opexpr Accessible functions are e abs a e ceil a i decimal a floor a i e gcd a b integer a mod a b gives result of a modulo b rest a b gives remainder of a divide by b difference between re mainider and modulo is the same as between non euclidian division and euclidian division e round a i where functions that aren t listed above ask the matching macros func tion xxx calls macro opxxx For functions ceil floor and round the number i indicates rank for approx
17. we specify a sequence of parameter s modifications through an affectation s comma separated sequence One affectation has one of the two possible syntax below lt parameter gt lt value gt lt parameter gt the second one is a shorthand for lt parameter gt true In this affectation sequence we can put space s after comma But dont put space around the equal sign nor before comma if you put space s here that means that parameter name or value has a space So if you want a comma as decimal separator an operator symbol side by side with the second operand and no carry you have just to say source 45 05 opadd decimalsepsymbol 7 8 4 voperator bottom 123 45 carryadd false 45 05 78 4 Note the trick which consists to put the comma between braces in the dec imal separator symbol definition In fact if you say source opadd decimalsepsymbol voperator bottom carryadd false 45 05 78 4 xlop drives mad It don t understand what is this sort of list Another important point though it is less apparent is that the figures are put in very precise places Each figure is put in a box of fixed width and fixed height user can change these values decimal separator is put in a null width box by default and the lines have a regular interspace with or without horizontal rule This allows exact spacing and to place what we want where we want source psset xunit opcolumnwidth yunit oplineheig
18. 05 qquad opmul displayshiftintermediary al1 453 1001205 qquad opmul displayshiftintermediary none 453 1001205 15 453 453 453 1001205 1 001205 1001205 2265 2265 2265 906 906 906 453 458 ves 453 453 45 Se ARE 453 453545865 453545865 453545865 In fact null intermediary numbers are not display because of the de fault value none of the displayintermediary parameter The value all shows all the intermediary numbers even null intermediary numbers z 453 1001205 2265 000 source 906 opmul displayintermediary al1 453 453 1001205 000 000 453 453545865 Note that null intermediary numbers are displayed with the same width than the first factor width The displayintermediary parameter accepts the value nonzero which means the same than the none value except when second factor has only one digit source opmul 3 14159 4 qquad opmul displayintermediary nonzero 3 14159 4 3 14159 Saai Es x 4 4 1256636 1256636 1256636 Finally parameter displayintermediary accepts the value None which don t display any intermediary numbers in all cases source opmul displayint ermediary None 453 1001205 3 453 1001205 453545865 16 Thehfactor parameter indicates how align operands The default value right gives a raggedleft alignment The decimal value gives an alignment on dot source opmul 3 1416 12 8 qquad opmul hfactor decimal 3 1416 12 8 3 1416 3 1416
19. 3 987 q r even more odd is rather fast Here explanation is quite subtle this is due to many zeros in the quotient When operands have comparable length euclidian division is much faster than non euclidian one This is because quotient has few digits only one for all the numbers A and B The last line of the table is more relevant for this operation time All these remarks are written to put the emphasis on the difficulty to evaluate the compilation time it depends on too many parameters On the other hand this table give a pretty good idea of what can be expected 33 A 2 Macros List opabs n N opcastingoutelevens n N Calcules difference modulo 11 of sum of rank odd digits and sum of rank even digits of n and put the re sult in N opcastingoutnines n N Calcules sum modulo 9 of digits ofn eee snaps opceil n T N Places in N the approximation ceil ees notte oo opemp n1 n2 Compares numbers n1 and n2 and setup the tests Vifopeg Vifopneg Vifopgt ifopge ifople et ifoplt opdecimal n N Copy decimal part positive integer opdecimalwidth n N N stores the width of decimal part of opdisplay P S n Display number n width style S put ing each figure in a box which has a width of opcolumnwidth and a height of oplineheight opdiv P n1 n2 N1 N2 Calculates n1 n2 put the quotient Midde opdivperiod T1 T2 N Calculates length of period of T1 di Mid a id opexpr
20. 5 maxdivestep 23 maxdivstep 18 19 22 30 33 46 mulsymbol 6 nil non significant zero number decimal part 25 integer part 25 limit 48 name 5 nonpositive in displayed opera tion 12 prime 41 size 4 valid 5 offsetcarry 14 opabs 28 opadd 12 Vopadds 23 Vopcastingoutelevens 27 28 Vopcastingoutnines 27 28 opceil 29 opemp 26 opcolumnwidth 24 opcolumnwidth 14 opcolumnwidth 8 opcopy 23 opdecimal 25 opdecimalwidth 25 opdisplay 24 opdiv 17 23 opdiv 23 Vopdivperiod 27 operandstyle 9 operation with hole 10 opexport 25 45 opexpr 30 opfloor 29 opgced 27 opgetdecimaldigit 26 opgetdigit 26 opgetintegerdigit 26 ophline 24 opidiv 1 2223 opidiv 23 opint egerwidth 25 oplineheight 24 oplineheight 8 op1 put 24 opmu1 15 opmul 23 opneg 28 oppower 28 opprint 23 oproot 46 opround 29 oprput 24 opset 6 opsetdecimaldigit 26 opsetdigit 26 opsetintegerdigit 26 opsqrt 46 opsub 13 opsub 23 opunzero 25 Op var 45 opv line 24 opwidth 25 overflow 4 package calc 40 fp 40 parameter addsymbo1 6 afterperiodsymbol 6l20I approxsymbol 6l 18 behaviorsub I5 carryadd 2 carrystyle 9 carrysub 14 columnwidth 8 24 decimalsepoffset 9 decimalsepsymbol 6 25
21. 5ex rput 2 75ex 0 opprint cna rput 2 75ex 0 opprint cnb rput 0 2 75ex opprint cna cnb rput 0 2 75ex opprint cn ax b end pspicture castingoutnines 157 317 49669 In passing this example shows that 157 x 317 4 49669 The right operation is 157 x 317 49769 The two next macros are very simple We have opneg which calculates the opposite ofits first argument and store it in the variable indicated by the second argument We have also opabs which does the same with absolute value Macro oppower calculates integer powers of numbers This macro has three parameters The third one store the first argument to the power of the second argument When the first argument is zero if the second argument is zero result is 1 ifthe second argument is positive result is 0 ifthe second argument is negative there is an error There isn t any limitation on first parameter This leads to some problems for instance source opcopy 0 8 a opcopy 17 n oppower a n r opprint a opprint n opprint r 0 87 44 4089209850062616169452667236328125 With 0 7 rather than 0 8 problem is worse 28 source opcopy 0 7 a opcopy 8 n oppower a n r opdecimalwidth r dr opprint a opprint n has opprint dr figures after dot 0 778 has 72 figures after dot In fact when exponent is negative first xlop calulates inverse of the number and after that it calcula
22. P F N Evaluates formula F and put the fi EG eee opfloor n T N Put in N the apprimation floor of n bi Ad opgced T1 T2 N Calculates gcd of T1 and T2 and put ME deg opgetdecimaldigit n T N Build the number N with the only opgetdigit n T N Build the number N with the only Es iN digit in slot T of number n to be continued 34 Maro _ Deseipion opgetintegerdigit n T N Build the number N width the only eee ET eatin sot Tofintegae partam ophline T1 T2 T3 Draw a horizontal rule of lengi T3 of thickness hrulewidth and which begin at T1 T2 in relation to reference point opidiv P n1 n2 Display the result of n1 n2 euclid ian division that is with integer di vision opidiv n1 n2 N1 N2 Calculates n1 n2 euclidian divi sion put quotient integer in N1 and remainder between 0 include and n2 exclude in N2 opinteger n N Copy integer part positive integer N ES ES id opintegerwidth n N Number N stores the width of integer MG GAN pattornuntern id oplput T1 T2 lt object gt Put lt object gt to the right of the point with coordinates T1 T2 in relation to reference point opmul P n1 n2 Display result of nl n2 opmul n1 n2 N Calculates n1 n2 and put the result inN opneg n N Number N stores opposite of n oppower n T N Calculates n to the power of T and put the result in N opprint n Display number n in a direct way
23. XLOP v 0 25 User Manual Jean C me Charpentier February 26 2013 Contents 2 xvlop Instructions 2 1 In the Beginning Was the Numbe 341 End Contro A Short Summary A l Compilation time B 1 xlop vs calc and fo B 2 Complex Operation B 3 DirectAccessto Numbe 3 4 2 Other Features 3 4 3 Non Integer Numbers and Negative Number 12 12 13 15 17 18 20 21 23 23 23 25 26 27 32 32 34 36 ii 46 48 Chapter 1 Overview The xlop package is intended to make automatic arithmetic operation on arbitrary sized numbers and to display result either on display mode or in line mode Here is a first exemple for an overview of the syntax 1 45 05 source 7 8 4 opadd 45 05 78 4 123 45 We comment this first example in order to give an idea about how use xlop Addition is displayed like in school this is the default displaying We have an alignment on dots operand s dot and result s dot operator symbol is put on the left and it is vertically centered between the operands and the decimal separator is a dot even though we have specified operands with comma Finally note that there is a carry above the first operand Alignment on dot is obligatory The other points above are deal with options Many macros accept an optional argument which controls some aspects of displaying or computing operation For that we use a keyval like syntax
24. ap rule 1pt 3pt 0 4pt opdiv shiftdecimalsep both 3 456 25 6 quad opdiv shiftdecimalsep divisor 3 456 25 6 quad opdiv shiftdecimalsep none 3 456 25 6 3 456 25 600 34560 0 135 34 56 25 6 3 4 56 2 5 6 89600 896 0 135 896 0 135 128000 1280 1280 0 0 0 When there is a non empty symbol for the striked decimal separator it is possible to have non significant zeros in operands 21 source opdiv shiftdecimalsep divisor strikedecimalsepsymbol 0 0 3 456 2 5 6 896 0 0 135 1280 hspace 3pt tiny times 0 0 03456 2 56 We have already seen that opidiv macro gives integer quotient This is true even with non integer operands It is somewhere strange to perform an euclidian division with non integer operands The opidiv macro will be strict about the presentation Parameters maxdivstep safedivstep and period haven t any effect as for shiftdecimalsep parameter since operands are changed to integer ones source 34 571 7 00 opidiv strikedecimalsepsymbol 657 4 hspace 3pt tiny times 34 57 7 When operands are negative the inline opidiv numbers is different from the displayed opidiv ones Remainder will be between zero in clude and absolute value of divisor exclude source 124 7 17 71428571 opdiv style text 124 7 par 124 7x17 5 opidiv style text 124 7 par 124 7 x 17 5 opidiv style text 124 7 par 124 7x 18 2 opidiv style text 124 7 par
25. contrary the inline mode shows always an addition since we can now write nonpositive numbers source 245 72 173 opadd style text 245 72 In addition to the general parameters discussed in the section 2 2 the macro opadd uses parameters carryadd lastcarry and deletezero The carryadd parameter is a boolean parameter that is it accepts only the values true and false By habit when you don t specify the value and the equal sign that is like assignment true This parameter indicates if the carries must be showed or not Its default value is true The lastcarry parameter is also a boolean parameter It indicates if a carry without matching digit for the two operands must be showed or not Its default value is false Take care to the exact r le of this parameter For instance if the second operand in the following example is 15307 the last carry would be showed for any value of the lastcarry parameter since there is a matching digit in the second operand 1 1 4825 source dd 482 7 5307 opadd 4825 5307 10132 12 4825 source i 5307 opadd carryadd false 4825 5307 10132 P 14 source tionon opadd lastcarry 4825 5307 10132 The deletezero parameter is also a boolean parameter It indicates if non significant zeros must be deleted or not Its default value is true When this parameter is false the operands and the result has the same number of digits For that xlop package adds non significant zeros Al
26. d lineheight parameters correspond to the only dimensions that xlop provides as public one that is opcolumnwidth and oplineheight respectively It is dangerous to directly modify these di mensions since a modification in a normal way doesn t only change the dimension value Package xlop make these dimensions public only for read ing not for writting The two next parameters allow to specify width of horizontal and verti cal rules stroked by xlop We have hrulewidth and vrulewidth parame ters The default values are both 0 4pt These rules are typeset with no change on grid That is with no space added Therefore with great values for thickness the rules could run over numbers 1 42 source opadd hrulewidth 8pt 42 172 There is also a paramater which allows to control the horizontal shift of decimal separator Itis the decimalsepoffset paramater with a default value of 0 35 This value indicates a length with the unit opcolumnwidth We will see an example at section B 4 page T7 2 2 4 Figure s Styles The xlop package provides five types of numbers and associates five style paramaters operands with operandstyle e result with resultstyle e remainders with remainderstyle e intermediary numbers with intermediarystyle e carries with carrystyle source 11 opadd operandstyle blue 45 89 resultstyle red 12 7 5 carrystyle scriptsize green 17339 45 89 127 5 Keep in mind that in
27. ecimal form or a variable name but must be less than numbers acceptable by TES that is 2147483648 lt T lt 2147483647 A 3 Parameter list afterperiodsymbol ldots Symbol used after a period of a division approxsymbol approx Symbol used as approximation relation EN Ga EF ee id egualsymbol Symbol used as equality relation in in addsymbol Symbol used as addition operator Symbal used as substraction operator Symbal used as multiplication operator divsymbol div Symbol used as multiplication operator for inline operations decimalsepsymbol Symbol used as decimal separator strikedecimalsepsymbol Symbol used as decimal separator moved in dividend and divisor for display division shiftintermediarysymbol cdot Symbol used to show intermediary num bers shifting for display multiplication to be continued 36 displayshiftintermediary shift Indicates that the shifting character for multiplications will be displayed only for additional shifting value shift for all the shifting value all or never value none voperation bottom Vertical alignement for displayed oper ation The value bottom indicates that the bottom of operation will be aligned with baseline The value top indicates that the top of operation will be aligned with baseline The value center indi cates that operation will be verticaly cen tred with baseline voperator center Vertical alignement for operators in dis
28. erstyle Style for remainders intermediarystyle a Style for intermediary results interme diary numbers in multiplication and number to substract in division when successive substractions are displayed carrystyle scriptsize Style for carries The default value when compilation are made without BTEX is sevenrm 39 Appendix B Tricks B 1 xlop vs calc and fp You could believe that xlop can replace package such calc and fp In fact that is not so simple Obviously xlop can do complex calculations on arbi trary long numbers but unlike calc it don t allow to process directly dimen sions Comparison with fp is somewhere more realistic but remember that xlop can make memory usage too high If you want to process calculations on length you can use that a dimen register allocation to a counter gives a number which correspond to this length with unit sp source newcommand getsize 2 dimen0 1 relax count255 dimenO opcopy the count255 2 getsize 1pt r 1 mathrm pt opprint r mathrm sp quad getsize 1pc r 1 mathrm pc opprint r mathrm sp quad getsize lin r 1 mathrm in opprint r mathrm sp quad getsize 1lbp r 1 mathrm bp opprint r mathrm sp quad getsize 1lcm r 1 mathrm cm opprint r mathrm sp quad getsize 1mm r 1 mathrm mm opprint r mathrm sp quad getsize 1dd r 1 mathrm dd opprint r mathrm sp quad getsize lcc
29. ets negative numbers with parenthesis but the first one source opadd style text parenthesisnegative none 12 23 par 12 23 35 opadd style text 12 23 35 parenthesisnegative al1 12 23 85 12 23 par opadd style text parenthesisnegative last 12 23 2 2 3 Dimensions In displayed operations figures are put in fixed size boxes The width is given by the lineheight parameter and the height is given by the lineheight parameter The default value of lineheight is baselineskip that is in terline space in operation is the same by default as in the normal text The default value for columnwidth is 2ex because the normal width of figures would give bad results 11 source q 1089 opadd columnwidth 0 5em 1275 45 89 127 5 17339 One reason for this bad result is that the decimal separator is put in a box which width is controlled by the decimalsepwidth parameter and the de fault value of this parameter is null You can improve this presentation giv ing a normal width to the dot source opadd columnwidth 0 5em 11 toe decimalsepwidth 0 27778em 45 89 127 5 173 39 2 It is better but give a positive width to the box that contain the decimal separator is risked It will be more difficult to place extern object and it is counter against the idea to have a fixed grid You should avoid this in normal time The columnwidth an
30. hereas the second one is a variable name The opprint macro displays its argument The following example uses the counter time which indicates numbers of minutes since midnight 23 source opidiv the time 60 h m It is 13 hours 55 minutes It is opprint h hours opprint m minutes We will see at section 4 4 how to improve this example with tests The opdisplay macro also displays a number but here each figure is in a box The width of this box is given by columnwidth and the height of this box is given by lineheight Style is specified by the first argument This macro accepts an optional argument in order to give a specific style for individual figures source opdisplay resultstyle 1 bfseries 129 192 resultstyle 2 bfseries resultstyle 129 192 Macros oplput and oprput allow to put anything anywhere The syn tax of both of them is different from the other ones of xlop since the place is indicated with coordinates between parenthesis The coordinates use opcolumnwidth and oplineheight as units Then user is able to build his own operations source psset xunit opcolumnwidth 0123456789 10 yunit oplineheight psgrid subgriddiv 1 gridlabels 7pt griddots 5 0 1 10 2 oplput 2 0 Hello oprput 8 1 world bullet On example above note that these macros don t move the reference point As a precaution they kill the trailing space and then there is no
31. ht __ carry s i opadd 45 05 78 4 723 45 oplput 1 5 3 carry psline gt 1 3 15 3 25 3 15 This example uses package pstricks We have said that xlop package is able to deal with arbitrary sized num bers We come again about this subject and for now we just give an exam ple which shows what is possible Don t look at the code some explanations will be given later in this manual for now just admire the result source opdiv style text period 1 49 1 49 0 020408163265306122448979591836734693877551 The package xlop provides some other features It is possible to manip ulate numbers through variables These variables can be created with an assignation or as a computation result You can also manipulate the figures individually source opadd 45 05 78 4 r The first figure after dot of 45 05 78 4 is The first figure after dot of 45 05 78 4 is 4 opgetdecimaldigit r 1 d opprint d you can make tests source opadd 45 05 78 4 r The sum 45 05 78 4 is opcmp r 100 The sum 45 05 78 4 is ifopgt greater than greater than 100 else ifoplt less than else equal to fi fi 100 you can use some operations and some functions source gcd of 182 and 442 is godotluzanda42is20 IN Spgedti82 AD Ka SOP ENG you can compute complex expression in infix form source 2432 opexpr 2 342 ged 22 33 HT god 22 33 frac 2 342
32. imation Macro opexpr accept optional argument since it can realize division which can be controlled bymaxdivstep safedivstep and period param eters Our first example is quite basic source opexpr 3 gcd 15 17 25 27 2 r 3 gced 15 times17 25 times27 times2 opprint r 3 gcd 15 x 17 25 x 27 x 2 33 Here is another example that shows that datas can come from a macro 30 source newcommand try 2 opexpr try 1 try 1 try 1 try 1 try 1 try r Continued fraction of base u_n 2 equal opprint r at rank 5 Continued fraction of base u 2 equal 2 414285714 at rank 5 31 Appendix A Short Summary A 1 Compilation times Compilation times was measured on a computer with processor Pentium II 600 MHz RAM 256 MB on linux system Debian woody p The principle is to do a minimal file tex The general canvas is input xlop count255 0 Loop ifnum count255 lt 1000 lt operation to test gt advance count255 byl repeat bye Compilation time with lt operation to test gt empty was substract from the others test Only the user time was take account Results are given in millisecond and should be read with great precautions Next table gives operation times in milliseconds Operands used had decimal notation but some trails with variable has shown that times was very closed First line indicates the numbers of digits for both operands Operands were build
33. inline text Indicates that all intermediary results are displayed all only non null ones are displayed nonzero or any inter mediary result isn t displayed into dis played multiplications and divisions Indicates that carry with no figure just below it must be displayed true or not false Behavior to display negative numbers in inline operations The value none dis plays them without parenthesis The value all displays them always with parenthesis The value last display parenthesis except for first operand of an expression With of box for one figure Height of box for one figure Width of box that hold the decimal sepa rator Horizontal offset for decimal separator Thickness of horizontal rules Thickness of vertical rules xlop behavior for an impossible sub straction that is a substraction with two positive operands the second greater than the first one The value silent does operation swapping the two operands in a slient way With the value warning there are also a swapping but xlop gives a warning The value error display an error message and operation isn t processed to be continued 38 country french Indicates the displayed operation behav ior depending of contry Package xlop put forward only french american and russian but these different ways to display operations aren t encoded in ver sion 0 25 Style for operands operandstyle Style for results remaind
34. ion top 251 25 quad opdiv displayintermediary all voperation top 251 25 251 25 251 25 251 25 0100 1004 25 10 04 25 10 04 0 0100 01 100 0 0 10 0 100 100 0 20 When we write a display division we can draw a bridge over the part of dividend which is taken in count for the first step of calculation The xlop package allow to draw this symbol thanks to the boolean parameter dividendbridge default value is false 1254 39 source 54 4 1 8 f sa opdiv dividendbridge 1254 30 0 3 4 3 Non Integer Numbers and Negative Numbers The shiftdecimalsep parameter governs non integer operands aspect Its default value is both which indicates that decimal separator is shifted in order to obtain integer divisor and integer dividend The value divisor indicates that there is the shifting that allows an integer divisor The value none indicates that there isn t any shifting source opdiv shiftdecimalsep both 3 456 25 6 quad opdiv shiftdecimalsep divisor 3 456 25 6 quad opdiv shiftdecimalsep none 3 456 25 6 3456 25600 34560 0 135 34 56 256 3 4 56 2 5 6 89600 896 0 135 896 0 135 128000 1280 1280 0 0 0 Parameter strikedecimalsepsymbol gives the symbol used to show the old place of decimal separator when this one is shifted The default value is empty that is there isn t any symbol This explain why you don t see anything on previous examples source opset strikedecimalsepsymbol rl
35. last case 4 3 Figures of Numbers Macros opwidth opintegerwidth and opdecimalwidth indicate num ber of digits of the whole number of its integer part of its decimal part re spectively The first argument is the examined number and the second one indicates the variable where result will be record source opcopy 123456 1234 a opwidth a na 123456 1234 is written opintegerwidth a ia with 10 figures 6 in the opdecimalwidth a da integer part and 4 in the opprint a is written with decimal part opprint na figures opprint ia in the integer part and opprint da in the decimal part Macro opunzero delete all the non significant zeros of the number passed as argument source opcopy 00150 00250 a Before 00150 00250 Before opprint a par After 150 0025 opunzero a After opprint a Macros integer and opdecimal give the integer part and the deci mal part of anumber respectively First argument is the number to process and the second one is the variable name which hold the result source opcopy 37 69911 a opinteger a ia Integer part 37 apdee maga idat Decimal part 69911 Integer part opprint ia par Decimal part opprint da 25 Six macros allow to write or read a figure of a number You can read or read a figure according to its place in the whole number or in the integer part or in the decimal part Figures for whole number and for decimal
36. ll stop automatically when a remainder will be zero whatever the values of these three parameters and a euclidean division will stop with an integer guotient without attention for these three parameters 29 7 40 3 57 1428571 50 10 30 source t CoE 60 40 50 10 3 source 25 7 ET 4 E opidiv 25 7 The first example stops because of the value of maxdivstep which is 10 by default Pay attention that the maximum step number could cause strange result when itis too small 124813 source 04 41 opdiv maxdivstep 2 1248 3 1 Clearly the last result is false In the other hand xlop package did what we have ask that is obtain two digits maximum for the guotient The inline mode differ with zero remainder or not and with the type of division classical or euclidean source 3 14 2 1 57 opdiv style text 3 14 2 par 3 14 3 1 046666666 opdiv style text 3 14 3 par 314 2x 157 opidiv style text 314 2 par 314 3x 10442 opidiv style text 314 3 Note the use of equalsymbol or approxsymbol parameter according to the case Note also that xlop displays results with floor not with round We will see how obtain a round in section 4 5 18 For inline mode of opdiv xlop take account of maxdivstep It means that we can obtain results very false with too small values of this parametrer and unlike with display mode division inline mode don t allow to under stand what is wrong source opdiv maxdivste
37. lls to the xlop macros the author has grown up the spool size to 250000 125000 was insufficient editing the line pool_size in the texmf cnf file Also the author has grown up the hash table to 1000 in the line hash_extra ln fact it was the author computer in 2004 The actual author computer is more pow erfull but the author is lazy and he has not remake the tests 2 1 2 Syntax Now we present the syntax using the BNF grammar There will be human explanations later number sign positive name sign positive integer sep integer integer sep integer sep integer sep l integer digit digit name start character start character except sign sep and digit The character symbol means nearly any character accepted by TEX The exceptions are characters and which are completely prohibited In fact the use of active characters is risked For instance on BIEX the defi nition prohibits the use of it inside a variable name In the other hand the is always the escape char that is the variable name will be the name after all is expanded There isn t any other restraint as the following code show it source newcommand prefix a b 4 opadd 2 2 a b_ c amp opprint prefix_ c amp Note particullary that a b_ 4c amp and prefix_ 4c amp produce exactly the same name obviously if prefix has the right definition This
38. lse 12 34 5 67 It is possible that a substraction with two positive numbers and with the first one less than the second one signs an user error In this case and only in this case the behaviorsub parameter allows a call to order The three possible values are e silent which is the default value and which gives the result e warning which gives also the result but shows the warning message xlop warning Substraction with first operand less than second one See documentation for further information e error which shows the error message xlop error See documentation for further information Type H lt return gt for immediate help Substraction with first operand less than second one and the operation is not performed 3 3 Multiplication The multiplication is under the control of the opmul macro The parameters we will see below are hfactor displayintermediary shiftintermediarysymbol and deletezero We studied the other pa rameters in section 2 2 The shiftintermediarysymbol parameter indicates what is the sym bol used for showing the shifting of intermediary numbers default value is cdot The displayshiftintermediary parameter can take value shift default value which shows this symbol only for shifting greater than one level value all which shows this symbol for all the shiftings and the value none which means that this symbol will be never showed source opmul displayshiftintermediary shift 453 10012
39. mathematic precisions that allows to implement these calculations 19 source 150 7 21 428571 opdiv period style text 150 7 We obtain an equality rather than an approximation there is a rule under the period and there is ellipsis after the period All these components can be configured The equality symbol is given by the equalsymbol parame ter default value is The rule thickness is given by the hrulewidth parameter default value is 0 4pt The vertical offset of this rule is given by vruleperiod parameter default value is 0 2 which indicates a vertical offset taking oplineheight as unit The ellipsis are given by the parame ter afterperiodsymbol default value ldots source opdiv period style text equalsymbol approx hrulewidth 0 2pt 150 7 21 428571 vruleperiod 0 7 afterperiodsymbol 150 7 3 4 2 Other Features Displayed divisions can include successive substractions which allow re mainder calculations For xlop the numbers which are substracted are in termediary numbers so the different ways to represent substractions use displayintermediary parameter see for multiplication The default value valeur none don t display any substraction the value all displays all the substractions and the value nonzero displays substractions with non zero numbers source opdiv displayintermediary none voperation top 251 25 quad opdiv displayintermediary nonzero voperat
40. one which indicates if carries must be present or not Its default value is false Remember that the default value of carryadd parameter is true N 12134 source DI6 7 opsub carrysub 1234 567 667 In the last example you can see that there is no carry above the last digit of 1234 This is quite common at least in France If you want dis play this last carry you have to use the lastcarry parameter This param eter does not have the same behavior in substraction and in addition since here the last carry is not displayed when the second operand does not have correspondent digit For addition last carry is not displayed when all the operands do not have correspondent digit 1 1516 7 opsub carrysub lastcarry 1234 567 667 Note that in this case it is better to set the deletezero parameter to false in order to have a nicer result source N 12314 opsub carrysub 101516 7 lastcarry 0667 deletezero false 1234 567 Perhaps it seems to you that showing carries for substraction is a bit more dense You can enlarge the figure box with the opcolumnwidth pa rameter You can also indicate the carry horizontal shift using the offsetcarry parameter Its default value is 0 35 14 source opsub carrysub lastcarry 123 ad deletezero false 12 34 5 67 1015 16 7 0 6 6 7 bigskip opsub carrysub 112 13 14 lastcarry 101516 7 columnwidth 2 5ex 06 67 offsetcarry 0 4 decimalsepoffset 3pt deletezero fa
41. op quad 1 opadd voperator top 45 172 par n 45 center quad 172 opadd voperator center 45 172 par center 217 bottom quad 1 opadd voperator bottom 45 172 45 172 bottom 217 The deletezero parameter indicates ifsome numbers in operation should be displayed with or whithout non significant zeros Exact r le of this pa rameter depends of the actual operation We will see that when we will study the different operations The style parameter indicates the way an operation is displayed dis play with display value default value or inline with text value We will see when we will study division because there is many possibilities with this operation source 45 172 217 opadd style text 45 172 In inline operations xlop takes care to not typeset the formula in mathe matic mode in a direct way This allow to specify what you want as in the next example and it is also for that that you have to specify the classical values of symbols between mathematic delimiters source opadd addsymbol plus 42 plus 172 equal 214 equalsymbol equal style text 42 172 Meanwhile xlop introduces exactly the same penalities and the same spaces as for a mathematic formula The parenthesisnegative parameter indicates how to typeset nega tive numbers in inline operations The possible values are e none which typesets negative numbers without parenthesis e all which typesets negative numbers with parenthesis e last which types
42. opround n T N Put in N the approximation of n at rank T oprput T1 T2 lt object gt Put lt object gt to the left of the point with coordinates T1 T2 in rela tion to reference point opset L Allocates globally xlop parameters given in the list L opsetdecimaldigit n T N Modify the digit of rank T in decimal part of N in order to have the value n for this digit opsetdigit n T N Modify the digit of rank T of N in or OREN Gerohavethevaluen forts dg opsetintegerdigit n T N Modify the digit of rank T in integer part of N in order to have the value n for this digit opsub P n1 n2 Display result of n1 n2 35 Macro Description opsub n1 n2 N Calculates n1 n2 and put the result inN opunzero N Delete non significant zeros of N opvline T1 T2 T3 Draw a vertical ruleof length T3 of thickness hrulewidth and which begin at T1 T2 in relation to ref erence point opwidth n N Number N stores number of digits of number n In this table parameters e nandni where i is an index indicate that parameter must be a num ber given in decimal form or a variable name e NandNi where i is an index indicate that parameter must be a num ber given in decimal form or a variable name e P indicates that the macro accept an optional parameter which al low to modify parameter of xlop e Tand Ti where i is an index indicate that parameter must be a num ber given in d
43. p 2 style text 1248 3241 1248 3 In addition if the last remainder is zero we obtain a must source N opdiv maxdivstep 1 style text 1208 3 4 1208 3 because there is no approximation at all A classical division can stop with period detection For that you have just to give the value true for the period parameter 100 3 source 1 3 3 3 opdiv period 100 3 1 To avoid comparizons between each remainder with all previous remain der xlop calculates immediatly the period length That allows to process only one comparizon for each step then to have a much more efficient pro cess Unfortunately these calculations are made with numbers that are directly accesible to TX As consequence you can t use operand with abso lute value greater than EF 214748364 In order to avoid too long calculations xlop don t process beyond the value of safedivstep parameter in division with period Its default value is 50 However xlop package show this problem For example if you ask for such a division with the code opdiv period 1 289 you obtain the warning message xlop warning Period of division is too big 272 gt safedivstep Division will stop before reach it See documentation for further information which indicates that this division period is 272 and that it can be achieved because of the safedivstep value The inline mode for division with period has some particularities Thanks to Olivier Viennet about
44. part are numbered from right to left figures for integer part are numbered from left to right For instance with the number 1234 56789 the second figure is 8 the second figure of the integer part is 3 and the second figure of the decimal part is 6 It is now easy to guess the r le of the six next macros e opgetdigit e opsetdigit e opgetintegerdigit e opsetintegerdigit e opgetdecimaldigit e opsetdecimaldigit Syntax is the same for these macros The first argument is the processed number reading or writting the second one is the index of te figure and the third one is the variable name which hold the result figure read or changed number If index is out of the range the reading macros give 0 as result and writing macros extend the number in order to reach this in dex for that zero will be created in new slots 4 4 Comparisons When you want complex macros often you need to realize tests For that xlop gives the macro opcmp The two arguments are numbers and this macro setup the tests ifopgt ifopge ifople ifoplt Vfopeg and Vifopneg to indicate that first operand is greater greater or equal less or equal less equal or different to the second operand respectively For technical reasons xlop give global definitions for the six tests above Then they are not protected by groups Since these tests are used by many xlop macros you must always use tests ifop immediately after opcmp or at least
45. r 1 mathrm cc opprint r mathrm sp quad getsize 1lsp r 1 mathrm sp opprint r mathrm sp quad lpt 65536sp lpc 786432sp lin 4736286sp lbp 65781sp lcm 1864679sp lmm 186467sp ldd 70124sp 1cc 841489sp 1sp lsp However don t forget that the xlop main goal is to display operations With this getsize macro it is possible to realise calculations on length 40 source newcommand getsize 2 dimen0 1 relax count255 dimen0 opcopy the count255 2 getsize 1cm u getsize textwidth w Surface of spread is 106 65 cm getsize textheight h opexpr w h ur2 S opround S 2 S Surface of spread is opprint S mathrm cm 42 B 2 Complex Operations Use of xlop macros with loop of TEX allow to create operations as you want Here we give only two examples The first one can express a number as a product of prime factors the second one is a general calculation for contin ued fraction source newcount primeindex newcount tryindex newif ifprime newif ifagain newcommand getprime 1 opcopy 2 P0 opcopy 3 P1 opcopy 5 try primeindex 2 loop ifnum primeindex lt 1 relax testprimality ifprime opcopy try P the primeindex advance primeindex byl fi opadd try 2 try ifnum primeindex lt 1 relax testprimality ifprime opcopy try P the primeindex advance primeindex byl fi opadd try 4 try fi repeat newcommand testp
46. rimality begingroup 41 againtrue global primetrue tryindex 0 loop opidiv try P the tryindex q r opcemp r 0 ifopeq global primefalse againfalse fi opcmp q P the tryindex ifoplt againfalse fi advance tryindex byl ifagain repeat endgroup With this code we can create a prime numbers list here the 20 first ones source getprime 20 2 Bee poco Cle opprint P0 opprint P1 ldots opprint P9 ldots opprint P19 Note that this code is very bad it is very slow and don t give anything against native TEX operations It is only a educational example Note also that the tricks to put loop into loop with macro testprimality inside a group xlop operations give global results Once you have your prime numbers table you can use it to write a number as product of prime number source newcommand primedecomp 2 nil begingroup opset 1 opcopy 2 NbtoDecompose opabs NbtoDecompose NbtoDecompose opinteger NbtoDecompose NbtoDecompose opcmp NbtoDecompose 0 ifopeq I refuse to factorize zero else setbox1 hbox opdisplay operandstyle 1 NbtoDecompose setbox2 box2 count255 1 primeindex 0 loop opcmp NbtoDecompose 1 ifopneq opidiv NbtoDecompose P the primeindex q r opcmp 0 r ifopeq 42 ifvoid2 setbox2 hbox opdisplay intermediarystyle the count255 P the primeindex else setbox2 vtop
47. so the non significant zeros of operands are not removed 111 12 3427 j 5 2 773 source er opadd 012 3427 5 2773 par opadd deletezero false sone 012 3427 5 2773 n 012 3427 005 2773 017 6200 This parameter has exactly the same r le for inline mode than for dis played mode source opadd style text 02 8 1 2 par opadd style text 2 8 1 2 4 02 8 1 2 04 0 deletezero false 02 8 1 2 par 3 2 Substraction Substraction is made by opsub macro In displayed mode the substrac tion shows only nonnegative numbers For that it shows an addition when one operand is nonpositive 1 source 245 a opsub 245 72 317 In a general way the principle is to display the operation which allow to find the result as you make it by hand On the contrary inline mode shows always a substraction since you can now write nonpositive numbers 13 source 245 72 317 opsub style text 245 72 This principle apply also when the first operand is less than the second one positive case In this case we have an operand inversion 2 45 source 1 2 opsub 1 2 2 45 1 25 Of course inline operation gives an exact result source 1 2 2 45 1 25 opsub style text 1 2 2 45 In addition to general parameters we have seen at section 2 2 opsub takes account of carrysub lastcarry offsetcarry deletezero and behaviorsub parameters The carrysub parameter is a boolean
48. tes the power with opposite of the exponent In this example if we had left 17 rather than 8 then there will be a capacity overflow capacity of TEX Three macros allow a control about precision They allow to approxi mate a number giving the rank of the approximation There are opfloor opceil and opround They need three parameters which are in order start number rank of approximation variable name to store the result Rank is an integer value giving number of digits after decimal separator which must be present If this rank is negative approximation will be done before the decimal separator If rank is positive and indicates more digits than decimal part has then zeros will be added If rank is negative and indi cates more digits than integer part has then approximation will be locked in order to give the first digit of the number at least Here is a summary table which allow to understand how these macros work op 13838 3838 in ir u floor cei roa 3838 383800 3838 383800 3838 383800 3838 3838 3838 3838 3838 3838 3838 383 3838 384 3838 384 3838 3839 3838 3830 3840 3840 3800 3900 3800 3000 4000 4000 op 3838 3838 n r n fior eel round 3838 383800 3838 383800 3838 383800 3838 3838 3838 3838 3838 3838 3838 384 3838 383 3838 384 3839 3838 3838 3840 3830 3840 3900 3800 3800 4000 3000 4000 29 The very last macro
49. ument is a non integer number only the integer part will be take account source opcopy 5376 a opcopy 2304 b gcd 5376 2304 768 opgcd a b gcd ab gcd opprint a opprint b opprint gcd ab You can play and find long period of divisions Without going into math ematical details square of prime numbers are good choices For instance with 2572 66049 you obtain source opdivperiod 1 66049 p ar i 66049 has a period of frac 1 66049 has a period length 65792 of length opprint p With macros opcastingoutnines and opcastingoutelevens you can build casting out of nines and casting out of elevens xlop don t typeset 27 directly these operations since they need diagonal rules and then need some particular packages In fact macro Vopcastingoutnines calculates the sum modulo 9 of first argument digits and put the result in second ar gument Macro Vopcastingoutelevens calculates the sum modulo 11 of the even rank digits of first argument calculates the sum moldulo 11 of the odd rank digits of first argument and calculates the difference of these two SUMS source newcommand castingoutnines 3 opcastingoutnines 1 cna opcastingoutnines 2 cnb opmul cna cnb cna cnb opcastingoutnines cna cnb cna cnb opcastingoutnines 3 cn axb begin pspicture 3 5ex 3 5ex 8 3 5ex 3 5ex 4 2 psline 3 5ex 3 5ex 3 5ex 3 5ex 7 psline 3 5ex 3 5ex 3 5ex 3
50. will take acount of decimal digit of quotient For all requests or bug report the author will be grateful to you to con tact him at 46 Jean Come Charpentier wanadoo fr placing the word xlop in the subject in order to help my spam killer It would be nice to have a hacker manual which explain in details the source This tool could be usefull in order to improve xlop Unfortunately the current code has more than 4000 lines and the work to do that may well be too long 47 Appendix D Index addsymbol 6 afterperiodsymbol 6 20 approxsymbol 6 18 behaviorsub 15 BNF grammar 5 calc carryadd carrystyle 9 carrysub casting out of elevens 27 casting out of nines 27 columnwidth compilation time complex expression decimal part 25 decimalsepoffset d decimalsepsymbol 6125 decimalsepwidth 8 deletezero d 13 141 17 displayintermediary 16 20 displayshiftintermediary 15 dividendbridge 21 division period 6 19 27 divsymbol 6 equalsymbol 6 18 20 fp 40 gcd 27 getsize 40 global allocation 42 hash table d hfactor I7 hrulewidth 8 20 24 Vifopea 26 ifopge 26 ifopgt 26 ifople 26 ifop1t 26 ifopneg 26 integer 25 integer part 25 intermediarystyle 9 lastcarry 22 04 length 40 lineheight 8 24 loop 5 41144 macros table of 34H36 makeatletter 45 makeatother 4

Download Pdf Manuals

image

Related Search

Related Contents

spi tm2 ts User Manual  LL-S242A-W LL-P202V MONITOR LCD CONTROLADOR  Severin HT 0111 hair dryer  Eizo T57S User's Manual  rainin lts - FindTheNeedle.co.uk  USER MANUAL  Samsung ST70 Manuel de l'utilisateur  Trichodex - AMC Chemical  JVC KD-G207 User's Manual  Plejad Copter Control Version 1.0 Aufbau und Bedienungsanleitung  

Copyright © All rights reserved.
Failed to retrieve file