![]() |
Routines |
| Prev: 13999 | Up: Map | Next: 14099 |
|
Used by the routine at to_power.
The address of this routine is found in the table of addresses. It is called indirectly via fp_calc_2.
This subroutine handles the function EXP X and is the first of four routines that use the series generator to produce Chebyshev polynomials.
The approximation to EXP X is found as follows:
|
||||
| exp | 14020 | RST 40 | X | |
|
Perform step i.
|
||||
| 14021 | DEFB 61 | re_stack: X (in full floating-point form) | ||
| 14022 | DEFB 52 | stk_data: X, 1/LN 2 | ||
| 14023 | DEFB 241,56,170,59,41 | |||
| 14028 | DEFB 4 | multiply: X/LN 2=Y | ||
|
Perform step ii.
|
||||
| 14029 | DEFB 49 | duplicate: Y, Y | ||
| 14030 | DEFB 39 | int: Y, INT Y=N | ||
| 14031 | DEFB 195 | st_mem_3: Y, N (mem-3 holds N) | ||
|
Perform step iii.
|
||||
| 14032 | DEFB 3 | subtract: Y-N=W | ||
|
Perform step iv.
|
||||
| 14033 | DEFB 49 | duplicate: W, W | ||
| 14034 | DEFB 15 | addition: 2*W | ||
| 14035 | DEFB 161 | stk_one: 2*W, 1 | ||
| 14036 | DEFB 3 | subtract: 2*W-1=Z | ||
|
Perform step v, passing to the series generator the parameter '8' and the eight constants required.
|
||||
| 14037 | DEFB 136 | series_08: Z | ||
| 14038 | DEFB 19,54 | |||
| 14040 | DEFB 88,101,102 | |||
| 14043 | DEFB 157,120,101,64 | |||
| 14047 | DEFB 162,96,50,201 | |||
| 14051 | DEFB 231,33,247,175,36 | |||
| 14056 | DEFB 235,47,176,176,20 | |||
| 14061 | DEFB 238,126,187,148,88 | |||
| 14066 | DEFB 241,58,126,248,207 | |||
|
At the end of the last loop the 'last value' is 2**W.
Perform step vi.
|
||||
| 14071 | DEFB 227 | get_mem_3: 2**W, N | ||
| 14072 | DEFB 56 | end_calc | ||
| 14073 | CALL FP_TO_A | The absolute value of N mod 256 is put into the A register. | ||
| 14076 | JR NZ,N_NEGTV | Jump forward if N was negative. | ||
| 14078 | JR C,REPORT_6_2 | Error if ABS N>255. | ||
| 14080 | ADD A,(HL) | Now add ABS N to the exponent. | ||
| 14081 | JR NC,RESULT_OK | Jump unless e>255. | ||
|
Report 6 - Number too big.
|
||||
| REPORT_6_2 | 14083 | RST 8 | Call the error handling routine. | |
| 14084 | DEFB 5 | |||
| N_NEGTV | 14085 | JR C,RSLT_ZERO | The result is to be zero if N<-255. | |
| 14087 | SUB (HL) | Subtract ABS N from the exponent as N was negative. | ||
| 14088 | JR NC,RSLT_ZERO | Zero result if e less than zero. | ||
| 14090 | NEG | Minus e is changed to e. | ||
| RESULT_OK | 14092 | LD (HL),A | The exponent, e, is entered. | |
| 14093 | RET | Finished: 'last value' is EXP X. | ||
| RSLT_ZERO | 14094 | RST 40 | Use the calculator to make the 'last value' zero. | |
| 14095 | DEFB 2 | delete (the stack is now empty) | ||
| 14096 | DEFB 160 | stk_zero: 0 | ||
| 14097 | DEFB 56 | end_calc | ||
| 14098 | RET | Finished, with EXP X=0. | ||
| Prev: 13999 | Up: Map | Next: 14099 |