home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / progrmng / function.zoo / compfunc.bas < prev    next >
BASIC Source File  |  1990-11-07  |  15KB  |  786 lines

  1. DECLARE SUB cabs (x!, y!, z!)
  2. DECLARE SUB cdabs (x#, y#, z#)
  3.  
  4. DECLARE SUB ccart (r!, t!, x!, y!)
  5. DECLARE SUB ccartd (r!, t!, x!, y!)
  6. DECLARE SUB cdcart (r#, t#, x#, y#)
  7. DECLARE SUB cdcartd (r#, t#, x#, y#)
  8.  
  9. DECLARE SUB cpolar (x!, y!, r!, t!)
  10. DECLARE SUB cpolard (x!, y!, r!, t!)
  11. DECLARE SUB cdpolar (x#, y#, r#, t#)
  12. DECLARE SUB cdpolard (x#, y#, r#, t#)
  13.  
  14. DECLARE SUB cmult (x1!, y1!, x2!, y2!, x3!, y3!)
  15. DECLARE SUB cdiv (x1!, y1!, x2!, y2!, x3!, y3!)
  16.  
  17. DECLARE SUB cdmult (x1#, y1#, x2#, y2#, x3#, y3#)
  18. DECLARE SUB cddiv (x1#, y1#, x2#, y2#, x3#, y3#)
  19.  
  20. DECLARE SUB cexp (x1!, y1!, x2!, y2!)
  21. DECLARE SUB clog (x1!, y1!, x2!, y2!)
  22.  
  23. DECLARE SUB cdexp (x1#, y1#, x2#, y2#)
  24. DECLARE SUB cdlog (x1#, y1#, x2#, y2#)
  25.  
  26. DECLARE SUB csin (x1!, y1!, x2!, y2!)
  27. DECLARE SUB ccos (x1!, y1!, x2!, y2!)
  28. DECLARE SUB ctan (x1!, y1!, x2!, y2!)
  29.  
  30. DECLARE SUB cdsin (x1#, y1#, x2#, y2#)
  31. DECLARE SUB cdcos (x1#, y1#, x2#, y2#)
  32. DECLARE SUB cdtan (x1#, y1#, x2#, y2#)
  33.  
  34. DECLARE SUB casin (x1!, y1!, x2!, y2!)
  35. DECLARE SUB cacos (x1!, y1!, x2!, y2!)
  36. DECLARE SUB catan (x1!, y1!, x2!, y2!)
  37.  
  38. DECLARE SUB cdasin (x1#, y1#, x2#, y2#)
  39. DECLARE SUB cdacos (x1#, y1#, x2#, y2#)
  40. DECLARE SUB cdatan (x1#, y1#, x2#, y2#)
  41.  
  42. DECLARE SUB csinh (x1!, y1!, x2!, y2!)
  43. DECLARE SUB ccosh (x1!, y1!, x2!, y2!)
  44. DECLARE SUB ctanh (x1!, y1!, x2!, y2!)
  45.  
  46. DECLARE SUB cdsinh (x1#, y1#, x2#, y2#)
  47. DECLARE SUB cdcosh (x1#, y1#, x2#, y2#)
  48. DECLARE SUB cdtanh (x1#, y1#, x2#, y2#)
  49.  
  50. DECLARE SUB casinh (x1!, y1!, x2!, y2!)
  51. DECLARE SUB cacosh (x1!, y1!, x2!, y2!)
  52. DECLARE SUB catanh (x1!, y1!, x2!, y2!)
  53.  
  54. DECLARE SUB cdasinh (x1#, y1#, x2#, y2#)
  55. DECLARE SUB cdacosh (x1#, y1#, x2#, y2#)
  56. DECLARE SUB cdatanh (x1#, y1#, x2#, y2#)
  57.  
  58. DECLARE FUNCTION acos! (x!)
  59. DECLARE FUNCTION asin! (x!)
  60. DECLARE FUNCTION atan! (y!, x!)
  61. DECLARE FUNCTION sinh! (x!)
  62. DECLARE FUNCTION cosh! (x!)
  63. DECLARE FUNCTION tanh! (x!)
  64. DECLARE FUNCTION asinh! (x!)
  65. DECLARE FUNCTION acosh! (x!)
  66. DECLARE FUNCTION atanh! (x!)
  67. DECLARE FUNCTION amod! (x!, b!)
  68. DECLARE FUNCTION amax! (x!, y!)
  69. DECLARE FUNCTION dmin# (dx#, dy#)
  70. DECLARE FUNCTION amin! (x!, y!)
  71. DECLARE FUNCTION dmax# (dx#, dy#)
  72. DECLARE FUNCTION dmod# (dx#, b#)
  73. DECLARE FUNCTION datan# (dy#, dx#)
  74. DECLARE FUNCTION dacos# (dx#)
  75. DECLARE FUNCTION dacosh# (dx#)
  76. DECLARE FUNCTION dasin# (dx#)
  77. DECLARE FUNCTION dasinh# (dx#)
  78. DECLARE FUNCTION datanh# (dx#)
  79. DECLARE FUNCTION dcosh# (dx#)
  80. DECLARE FUNCTION dsinh# (dx#)
  81. DECLARE FUNCTION dtanh# (dx#)
  82. DECLARE FUNCTION sind! (x!)
  83. DECLARE FUNCTION dsind# (dx#)
  84. DECLARE FUNCTION cosd! (x!)
  85. DECLARE FUNCTION dcosd# (dx#)
  86. DECLARE FUNCTION tand! (x!)
  87. DECLARE FUNCTION dtand# (dx#)
  88. DECLARE FUNCTION atnd! (x!)
  89. DECLARE FUNCTION datnd# (dx#)
  90. DECLARE FUNCTION atand! (y!, x!)
  91. DECLARE FUNCTION datand# (dy#, dx#)
  92. DECLARE FUNCTION acosd! (x!)
  93. DECLARE FUNCTION dacosd# (dx#)
  94. DECLARE FUNCTION asind! (x!)
  95. DECLARE FUNCTION dasind# (dx#)
  96.  
  97. CLS : RANDOMIZE TIMER
  98. f$ = "###.#####   ###.#####   ###.#####   ###.#####   ###.########"
  99. FOR i = 1 TO 10
  100.   x1 = RND * 4 - 2: dx1# = x1: y1 = RND * 4 - 2: dy1# = y1
  101.   x2 = RND * 4 - 2: dx2# = x2: y2 = RND * 4 - 2: dy2# = y2
  102.   CALL cdtanh(dx1#, dy1#, dz1#, dz2#)
  103.   CALL cdatanh(dz1#, dz2#, dx2#, dy2#)
  104.   CALL ctanh(x1, y1, z1, z2)
  105.   CALL catanh(z1, z2, x2, y2)
  106.   e = SQR((x1 - x2) ^ 2 + (y1 - y2) ^ 2)
  107.   de# = SQR((dx1# - dx2#) ^ 2 + (dy1# - dy2#) ^ 2)
  108.   PRINT USING f$; dx1#; dy1#; dx2#; dy2#; de#
  109.   'PRINT USING f$; x1; y1; x2; y2; e
  110.   NEXT i
  111.  
  112. FUNCTION acos (x) STATIC
  113.  
  114. y = SQR(1 - x * x)
  115. acos = atan(y, x)
  116.  
  117. END FUNCTION
  118.  
  119. FUNCTION acosd (x) STATIC
  120.  
  121. y = SQR(1 - x * x)
  122. acosd = atand(y, x)
  123.  
  124. END FUNCTION
  125.  
  126. FUNCTION acosh (x) STATIC
  127.  
  128. acosh = LOG(x + SQR(x * x - 1))
  129.  
  130. END FUNCTION
  131.  
  132. FUNCTION amax (x, y) STATIC
  133.  
  134. amax = y
  135. IF x > y THEN amax = x
  136.  
  137. END FUNCTION
  138.  
  139. FUNCTION amin (x, y) STATIC
  140.  
  141. amin = y
  142. IF x < y THEN amin = x
  143.  
  144. END FUNCTION
  145.  
  146. FUNCTION amod (x, b) STATIC
  147.  
  148. amod! = x - b * FIX(x / b)
  149.  
  150. END FUNCTION
  151.  
  152. FUNCTION asin (x) STATIC
  153.  
  154. y = SQR(1 - x * x)
  155. asin = atan(x, y)
  156.  
  157. END FUNCTION
  158.  
  159. FUNCTION asind (x) STATIC
  160.  
  161. y = SQR(1 - x * x)
  162. asind = atand(x, y)
  163.  
  164. END FUNCTION
  165.  
  166. FUNCTION asinh (x) STATIC
  167.  
  168. asinh = LOG(x + SQR(x * x + 1))
  169.  
  170. END FUNCTION
  171.  
  172. FUNCTION atan (y, x) STATIC
  173.  
  174. pio2 = 2 * ATN(1)
  175.  
  176. IF x = 0 THEN
  177.   atan = SGN(y) * pio2
  178.   EXIT FUNCTION
  179. ELSEIF y = 0 THEN
  180.   atan = (1 - SGN(x)) * pio2
  181.   EXIT FUNCTION
  182. END IF
  183.  
  184. t = ATN(y / x)
  185. IF x > 0 THEN
  186.   atan = t
  187. ELSE
  188.   atan = t + SGN(y) * 2 * pio2
  189. END IF
  190.  
  191. END FUNCTION
  192.  
  193. FUNCTION atand (y, x) STATIC
  194.  
  195. pio2 = 90: r2d = 45 / ATN(1)
  196.  
  197. IF x = 0 THEN
  198.   atand = SGN(y) * pio2
  199.   EXIT FUNCTION
  200. ELSEIF y = 0 THEN
  201.   atand = (1 - SGN(x)) * pio2
  202.   EXIT FUNCTION
  203. END IF
  204.  
  205. t = ATN(y / x) * r2d
  206. IF x > 0 THEN
  207.   atand = t
  208. ELSE
  209.   atand = t + SGN(y) * 2 * pio2
  210. END IF
  211.  
  212. END FUNCTION
  213.  
  214. FUNCTION atanh (x) STATIC
  215.  
  216. atanh = .5 * LOG((1 + x) / (1 - x))
  217.  
  218. END FUNCTION
  219.  
  220. FUNCTION atnd (x) STATIC
  221.  
  222. r2d = 45 / ATN(1)
  223. atnd = ATN(x) * r2d
  224.  
  225. END FUNCTION
  226.  
  227. SUB cabs (x, y, z)
  228.  
  229. ' magnitude of a complex number
  230. z = SQR(x * x + y * y)
  231.  
  232. END SUB
  233.  
  234. SUB cacos (x1, y1, x2, y2)
  235.  
  236. ' complex arccosine
  237. u1 = x1 * x1 - y1 * y1 - 1: v1 = 2 * x1 * y1
  238. CALL cpolar(u1, v1, r, t)
  239. r = SQR(r): t = t / 2: u1 = r * COS(t): v1 = r * SIN(t)
  240. u2 = x1 + u1: v2 = y1 + v1
  241. CALL clog(u2, v2, u1, v1)
  242. x2 = v1: y2 = -u1
  243.  
  244. END SUB
  245.  
  246. SUB cacosh (x1, y1, x2, y2)
  247.  
  248. ' complex inverse hyperbolic cosine
  249. u1 = x1 * x1 - y1 * y1 - 1: v1 = 2 * x1 * y1
  250. CALL cpolar(u1, v1, r, t)
  251. r = SQR(r): t = t / 2: u1 = r * COS(t): v1 = r * SIN(t)
  252. u2 = x1 + u1: v2 = y1 + v1
  253. CALL clog(u2, v2, x2, y2)
  254.  
  255. END SUB
  256.  
  257. SUB casin (x1, y1, x2, y2)
  258.  
  259. ' complex arcsine
  260. u1 = 1 - x1 * x1 + y1 * y1: v1 = -2 * x1 * y1
  261. CALL cpolar(u1, v1, r, t)
  262. r = SQR(r): t = t / 2: u1 = r * COS(t): v1 = r * SIN(t)
  263. u2 = -y1 + u1: v2 = x1 + v1
  264. CALL clog(u2, v2, u1, v1)
  265. x2 = v1: y2 = -u1
  266.  
  267. END SUB
  268.  
  269. SUB casinh (x1, y1, x2, y2)
  270.  
  271. ' complex inverse hyperbolic sine
  272. u1 = x1 * x1 - y1 * y1 + 1: v1 = 2 * x1 * y1
  273. CALL cpolar(u1, v1, r, t)
  274. r = SQR(r): t = t / 2: u1 = r * COS(t): v1 = r * SIN(t)
  275. u2 = x1 + u1: v2 = y1 + v1
  276. CALL clog(u2, v2, x2, y2)
  277.  
  278. END SUB
  279.  
  280. SUB catan (x1, y1, x2, y2)
  281.  
  282. ' complex arctangent
  283. u1 = 1 - y1: v1 = x1: u2 = 1 + y1: v2 = -x1
  284. CALL cdiv(u1, v1, u2, v2, u3, v3)
  285. CALL clog(u3, v3, u1, v1)
  286. x2 = v1 / 2: y2 = -u1 / 2
  287.  
  288. END SUB
  289.  
  290. SUB catanh (x1, y1, x2, y2)
  291.  
  292. ' complex inverse hyperbolic tangent
  293. u1 = 1 + x1: v1 = y1: u2 = 1 - x1: v2 = -y1
  294. CALL cdiv(u1, v1, u2, v2, u3, v3)
  295. CALL clog(u3, v3, u1, v1)
  296. x2 = u1 / 2: y2 = v1 / 2
  297.  
  298. END SUB
  299.  
  300. SUB ccart (r, t, x, y)
  301.  
  302. '  determine cartesian coordinates from polar
  303. x = r * COS(t): y = r * SIN(t)
  304.  
  305. END SUB
  306.  
  307. SUB ccartd (r, t, x, y)
  308.  
  309. '  determine cartesian coordinates from polar in degrees
  310. x = r * cosd(t): y = r * sind(t)
  311.  
  312. END SUB
  313.  
  314. SUB ccos (x1, y1, x2, y2)
  315.  
  316. ' complex cosine
  317. x2 = COS(x1) * cosh(y1): y2 = -SIN(x1) * sinh(y1)
  318.  
  319. END SUB
  320.  
  321. SUB ccosh (x1, y1, x2, y2)
  322.  
  323. ' complex hyperbolic cosine
  324. x2 = cosh(x1) * COS(y1): y2 = sinh(x1) * SIN(y1)
  325.  
  326. END SUB
  327.  
  328. SUB cdabs (x#, y#, z#)
  329.  
  330. ' magnitude of a complex number
  331. z# = SQR(x# * x# + y# * y#)
  332.  
  333. END SUB
  334.  
  335. SUB cdacos (x1#, y1#, x2#, y2#)
  336.  
  337. ' complex arccosine
  338. u1# = x1# * x1# - y1# * y1# - 1#: v1# = 2# * x1# * y1#
  339. CALL cdpolar(u1#, v1#, r#, t#)
  340. r# = SQR(r#): t# = t# / 2#: u1# = r# * COS(t#): v1# = r# * SIN(t#)
  341. u2# = x1# + u1#: v2# = y1# + v1#
  342. CALL cdlog(u2#, v2#, u1#, v1#)
  343. x2# = v1#: y2# = -u1#
  344.  
  345. END SUB
  346.  
  347. SUB cdacosh (x1#, y1#, x2#, y2#)
  348.  
  349. ' complex inverse hyperbolic cosine
  350. u1# = x1# * x1# - y1# * y1# - 1#: v1# = 2# * x1# * y1#
  351. CALL cdpolar(u1#, v1#, r#, t#)
  352. r# = SQR(r#): t# = t# / 2#: u1# = r# * COS(t#): v1# = r# * SIN(t#)
  353. u2# = x1# + u1#: v2# = y1# + v1#
  354. CALL cdlog(u2#, v2#, x2#, y2#)
  355.  
  356. END SUB
  357.  
  358. SUB cdasin (x1#, y1#, x2#, y2#)
  359.  
  360. ' complex arcsine
  361. u1# = 1# - x1# * x1# + y1# * y1#: v1# = -2# * x1# * y1#
  362. CALL cdpolar(u1#, v1#, r#, t#)
  363. r# = SQR(r#): t# = t# / 2#: u1# = r# * COS(t#): v1# = r# * SIN(t#)
  364. u2# = -y1# + u1#: v2# = x1# + v1#
  365. CALL cdlog(u2#, v2#, u1#, v1#)
  366. x2# = v1#: y2# = -u1#
  367.  
  368. END SUB
  369.  
  370. SUB cdasinh (x1#, y1#, x2#, y2#)
  371.  
  372. ' complex inverse hyperbolic sine
  373. u1# = x1# * x1# - y1# * y1# + 1#: v1# = 2# * x1# * y1#
  374. CALL cdpolar(u1#, v1#, r#, t#)
  375. r# = SQR(r#): t# = t# / 2#: u1# = r# * COS(t#): v1# = r# * SIN(t#)
  376. u2# = x1# + u1#: v2# = y1# + v1#
  377. CALL cdlog(u2#, v2#, x2#, y2#)
  378.  
  379. END SUB
  380.  
  381. SUB cdatan (x1#, y1#, x2#, y2#)
  382.  
  383. ' complex arctangent
  384. u1# = 1# - y1#: v1# = x1#: u2# = 1# + y1#: v2# = -x1#
  385. CALL cddiv(u1#, v1#, u2#, v2#, u3#, v3#)
  386. CALL cdlog(u3#, v3#, u1#, v1#)
  387. x2# = v1# / 2#: y2# = -u1# / 2#
  388.  
  389. END SUB
  390.  
  391. SUB cdatanh (x1#, y1#, x2#, y2#)
  392.  
  393. ' complex inverse hyperbolic tangent
  394. u1# = 1# + x1#: v1# = y1#: u2# = 1# - x1#: v2# = -y1#
  395. CALL cddiv(u1#, v1#, u2#, v2#, u3#, v3#)
  396. CALL cdlog(u3#, v3#, u1#, v1#)
  397. x2# = u1# / 2#: y2# = v1# / 2#
  398.  
  399. END SUB
  400.  
  401. SUB cdcart (r#, t#, x#, y#)
  402.  
  403. '  determine cartesian coordinates from polar
  404. x# = r# * COS(t#): y# = r# * SIN(t#)
  405.  
  406. END SUB
  407.  
  408. SUB cdcartd (r#, t#, x#, y#)
  409.  
  410. '  determine cartesian coordinates from polar in degrees
  411. x# = r# * dcosd(t#): y# = r# * dsind(t#)
  412.  
  413. END SUB
  414.  
  415. SUB cdcos (x1#, y1#, x2#, y2#)
  416.  
  417. ' complex cosine
  418. x2# = COS(x1#) * dcosh(y1#): y2# = -SIN(x1#) * dsinh(y1#)
  419.  
  420. END SUB
  421.  
  422. SUB cdcosh (x1#, y1#, x2#, y2#)
  423.  
  424. ' complex hyperbolic cosine
  425. x2# = dcosh(x1#) * COS(y1#): y2# = dsinh(x1#) * SIN(y1#)
  426.  
  427. END SUB
  428.  
  429. SUB cddiv (x1#, y1#, x2#, y2#, x3#, y3#)
  430.  
  431. '  divide complex number 1 by complex number 2
  432. denom# = x2# * x2# + y2# * y2#
  433. z1# = x2# / denom#: z2# = -y2# / denom#
  434. CALL cdmult(x1#, y1#, z1#, z2#, x3#, y3#)
  435.  
  436. END SUB
  437.  
  438. SUB cdexp (x1#, y1#, x2#, y2#)
  439.  
  440. '  complex exponential
  441. r# = EXP(x1#)
  442. x2# = r# * COS(y1#): y2# = r# * SIN(y1#)
  443.  
  444. END SUB
  445.  
  446. SUB cdiv (x1, y1, x2, y2, x3, y3)
  447.  
  448. '  divide complex number 1 by complex number 2
  449. denom = x2 * x2 + y2 * y2
  450. z1 = x2 / denom: z2 = -y2 / denom
  451. CALL cmult(x1, y1, z1, z2, x3, y3)
  452.  
  453. END SUB
  454.  
  455. SUB cdlog (x1#, y1#, x2#, y2#)
  456.  
  457. '  complex logarithm
  458. 'find polar coordinates
  459. CALL cdpolar(x1#, y1#, r#, t#)
  460. IF r# = 0 THEN r# = .000000001#
  461. x2# = LOG(r#): y2# = t#
  462.  
  463. END SUB
  464.  
  465. SUB cdmult (x1#, y1#, x2#, y2#, x3#, y3#)
  466.  
  467. '  multiply 2 complex numbers
  468. x3# = x1# * x2# - y1# * y2#: y3# = x1# * y2# + x2# * y1#
  469.  
  470. END SUB
  471.  
  472. SUB cdpolar (x#, y#, r#, t#)
  473.  
  474. '  convert cartesian to polar coordinates
  475. t# = datan#(y#, x#)
  476. r# = SQR(x# * x# + y# * y#)
  477.  
  478. END SUB
  479.  
  480. SUB cdpolard (x#, y#, r#, t#)
  481.  
  482. '  convert cartesian to polar coordinates in degrees
  483. t# = datand#(y#, x#)
  484. r# = SQR(x# * x# + y# * y#)
  485.  
  486. END SUB
  487.  
  488. SUB cdsin (x1#, y1#, x2#, y2#)
  489.  
  490. '  complex sine
  491. x2# = SIN(x1#) * dcosh(y1#): y2# = COS(x1#) * dsinh(y1#)
  492.  
  493. END SUB
  494.  
  495. SUB cdsinh (x1#, y1#, x2#, y2#)
  496.  
  497. ' complex hyperbolic sine
  498. x2# = dsinh(x1#) * COS(y1#): y2# = dcosh(x1#) * SIN(y1#)
  499.  
  500. END SUB
  501.  
  502. SUB cdtan (x1#, y1#, x2#, y2#)
  503.  
  504. ' complex tangent
  505. u1# = TAN(x1#): v1# = dtanh(y1#)
  506. u2# = 1#: v2# = -u1# * v1#
  507. CALL cddiv(u1#, v1#, u2#, v2#, x2#, y2#)
  508.  
  509. END SUB
  510.  
  511. SUB cdtanh (x1#, y1#, x2#, y2#)
  512.  
  513. ' complex hyperbolic tangent
  514. u1# = dtanh(x1#): v1# = TAN(y1#)
  515. u2# = 1#: v2# = u1# * v1#
  516. CALL cddiv(u1#, v1#, u2#, v2#, x2#, y2#)
  517.  
  518. END SUB
  519.  
  520. SUB cexp (x1, y1, x2, y2)
  521.  
  522. '  complex exponential
  523. r = EXP(x1)
  524. x2 = r * COS(y1): y2 = r * SIN(y1)
  525.  
  526. END SUB
  527.  
  528. SUB clog (x1, y1, x2, y2)
  529.  
  530. '  complex logarithm
  531. 'find polar coordinates
  532. CALL cpolar(x1, y1, r, t)
  533. IF r = 0 THEN r = 1E-09
  534. x2 = LOG(r): y2 = t
  535.  
  536. END SUB
  537.  
  538. SUB cmult (x1, y1, x2, y2, x3, y3)
  539.  
  540. '  multiply 2 complex numbers
  541. x3 = x1 * x2 - y1 * y2: y3 = x1 * y2 + x2 * y1
  542.  
  543. END SUB
  544.  
  545. FUNCTION cosd (x) STATIC
  546.  
  547. d2r = ATN(1) / 45
  548. cosd = COS(x * d2r)
  549.  
  550. END FUNCTION
  551.  
  552. FUNCTION cosh (x) STATIC
  553.  
  554. cosh = (EXP(x) + EXP(-x)) / 2
  555.  
  556. END FUNCTION
  557.  
  558. SUB cpolar (x, y, r, t)
  559.  
  560. '  convert cartesian to polar coordinates
  561. t = atan(y, x)
  562. r = SQR(x * x + y * y)
  563.  
  564. END SUB
  565.  
  566. SUB cpolard (x, y, r, t)
  567.  
  568. '  convert cartesian to polar coordinates in degrees
  569. t = atand(y, x)
  570. r = SQR(x * x + y * y)
  571.  
  572. END SUB
  573.  
  574. SUB csin (x1, y1, x2, y2)
  575.  
  576. '  complex sine
  577. x2 = SIN(x1) * cosh(y1): y2 = COS(x1) * sinh(y1)
  578.  
  579. END SUB
  580.  
  581. SUB csinh (x1, y1, x2, y2)
  582.  
  583. ' complex hyperbolic sine
  584. x2 = sinh(x1) * COS(y1): y2 = cosh(x1) * SIN(y1)
  585.  
  586. END SUB
  587.  
  588. SUB ctan (x1, y1, x2, y2)
  589.  
  590. ' complex tangent
  591. u1 = TAN(x1): v1 = tanh(y1)
  592. u2 = 1: v2 = -u1 * v1
  593. CALL cdiv(u1, v1, u2, v2, x2, y2)
  594.  
  595. END SUB
  596.  
  597. SUB ctanh (x1, y1, x2, y2)
  598.  
  599. ' complex hyperbolic tangent
  600. u1 = tanh(x1): v1 = TAN(y1)
  601. u2 = 1: v2 = u1 * v1
  602. CALL cdiv(u1, v1, u2, v2, x2, y2)
  603.  
  604. END SUB
  605.  
  606. FUNCTION dacos# (dx#) STATIC
  607.  
  608. dy# = SQR(1# - dx# * dx#)
  609. dacos# = datan#(dy#, dx#)
  610.  
  611. END FUNCTION
  612.  
  613. FUNCTION dacosd# (dx#) STATIC
  614.  
  615. dy# = SQR(1# - dx# * dx#)
  616. dacosd# = datand(dy#, dx#)
  617.  
  618. END FUNCTION
  619.  
  620. FUNCTION dacosh# (dx#) STATIC
  621.  
  622. dacosh# = LOG(dx# + SQR(dx# * dx# - 1#))
  623.  
  624. END FUNCTION
  625.  
  626. FUNCTION dasin# (dx#) STATIC
  627.  
  628. dy# = SQR(1# - dx# * dx#)
  629. dasin# = datan#(dx#, dy#)
  630.  
  631. END FUNCTION
  632.  
  633. FUNCTION dasind# (dx#) STATIC
  634.  
  635. dy# = SQR(1# - dx# * dx#)
  636. dasind# = datand(dx#, dy#)
  637.  
  638. END FUNCTION
  639.  
  640. FUNCTION dasinh# (dx#) STATIC
  641.  
  642. dasinh# = LOG(dx# + SQR(dx# * dx# + 1#))
  643.  
  644. END FUNCTION
  645.  
  646. FUNCTION datan# (dy#, dx#) STATIC
  647.  
  648. dpio2# = 2# * ATN(1#)
  649.  
  650. IF dx# = 0# THEN
  651.   datan# = SGN(dy#) * dpio2#
  652.   EXIT FUNCTION
  653. ELSEIF dy# = 0# THEN
  654.   datan# = (1# - SGN(dx#)) * dpio2#
  655.   EXIT FUNCTION
  656. END IF
  657.  
  658. dt = ATN(dy# / dx#)
  659. IF dx# > 0# THEN
  660.   datan# = dt
  661. ELSE
  662.   datan# = dt + SGN(dy#) * 2# * dpio2#
  663. END IF
  664.  
  665. END FUNCTION
  666.  
  667. FUNCTION datand# (dy#, dx#) STATIC
  668.  
  669. dpio2# = 90#: r2d# = 45# / ATN(1#)
  670.  
  671. IF dx# = 0# THEN
  672.   datand# = SGN(dy#) * dpio2#
  673.   EXIT FUNCTION
  674. ELSEIF dy# = 0# THEN
  675.   datand# = (1# - SGN(dx#)) * dpio2#
  676.   EXIT FUNCTION
  677. END IF
  678.  
  679. dt = ATN(dy# / dx#) * r2d#
  680. IF dx# > 0# THEN
  681.   datand# = dt
  682. ELSE
  683.   datand# = dt + SGN(dy#) * 2# * dpio2#
  684. END IF
  685.  
  686. END FUNCTION
  687.  
  688. FUNCTION datanh# (dx#) STATIC
  689.  
  690. datanh# = .5# * LOG((1# + dx#) / (1# - dx#))
  691.  
  692. END FUNCTION
  693.  
  694. FUNCTION datnd# (dx#) STATIC
  695.  
  696. r2d# = 45# / ATN(1#)
  697. datnd# = ATN(dx#) * r2d#
  698.  
  699. END FUNCTION
  700.  
  701. FUNCTION dcosd# (dx#) STATIC
  702.  
  703. d2r# = ATN(1#) / 45#
  704. dcosd# = COS(dx# * d2r#)
  705.  
  706. END FUNCTION
  707.  
  708. FUNCTION dcosh# (dx#) STATIC
  709.  
  710. dcosh# = (EXP(dx#) + EXP(-dx#)) / 2#
  711.  
  712. END FUNCTION
  713.  
  714. FUNCTION dmax# (dx#, dy#) STATIC
  715.  
  716. dmax# = dy#
  717. IF dx# > dy# THEN dmax# = dx#
  718.  
  719. END FUNCTION
  720.  
  721. FUNCTION dmin# (dx#, dy#) STATIC
  722.  
  723. dmin# = dy#
  724. IF dx# < dy# THEN dmin# = dx#
  725.  
  726. END FUNCTION
  727.  
  728. FUNCTION dmod# (dx#, b#) STATIC
  729.  
  730. dmod# = dx# - b# * FIX(dx# / b#)
  731.  
  732. END FUNCTION
  733.  
  734. FUNCTION dsind# (dx#) STATIC
  735.  
  736. d2r# = ATN(1#) / 45#
  737. dsind# = SIN(dx# * d2r#)
  738.  
  739. END FUNCTION
  740.  
  741. FUNCTION dsinh# (dx#) STATIC
  742.  
  743. dsinh# = (EXP(dx#) - EXP(-dx#)) / 2#
  744.  
  745. END FUNCTION
  746.  
  747. FUNCTION dtand# (dx#) STATIC
  748.  
  749. d2r# = ATN(1#) / 45#
  750. dtand# = TAN(dx# * d2r#)
  751.  
  752. END FUNCTION
  753.  
  754. FUNCTION dtanh# (dx#) STATIC
  755.  
  756. dtanh# = (EXP(dx#) - EXP(-dx#)) / (EXP(dx#) + EXP(-dx#))
  757.  
  758. END FUNCTION
  759.  
  760. FUNCTION sind (x) STATIC
  761.  
  762. d2r = ATN(1) / 45
  763. sind = SIN(x * d2r)
  764.  
  765. END FUNCTION
  766.  
  767. FUNCTION sinh (x) STATIC
  768.  
  769. sinh = (EXP(x) - EXP(-x)) / 2
  770.  
  771. END FUNCTION
  772.  
  773. FUNCTION tand (x) STATIC
  774.  
  775. d2r = ATN(1) / 45
  776. tand = TAN(x * d2r)
  777.  
  778. END FUNCTION
  779.  
  780. FUNCTION tanh (x) STATIC
  781.  
  782. tanh = (EXP(x) - EXP(-x)) / (EXP(x) + EXP(-x))
  783.  
  784. END FUNCTION
  785.  
  786.