home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / qtawk / ssfuncs.exp < prev    next >
Text File  |  1990-04-29  |  14KB  |  638 lines

  1. # QTawk Trade Studies scoring function utility
  2. # Standard scoring functions for Trade Studies
  3. # 12 standard scoring functions
  4. #
  5. # Scoring function #1
  6. #      ┌
  7. #      │ 0 ,                 V <= A
  8. #      │
  9. #      │          1
  10. # ssf1 =  │ ─────────────────────────────, V > A
  11. #      │          ┌       ┐2S(B+V-2A)  B > A
  12. #      │          │ B - A │        S > 0
  13. #      │    1 +   │───────│        f(B) = 0.5
  14. #      └          └ V - A ┘
  15. #
  16. # Scoring function #2
  17. #      ┌
  18. #      │ 1 ,                V >= C
  19. #      │
  20. #      │          1
  21. # ssf2 =  │ ─────────────────────────────, V < C
  22. #      │          ┌       ┐2S(B+V-2C)  B < C
  23. #      │          │ C - B │        S > 0
  24. #      │    1 +   │───────│        f(B) = 0.5
  25. #      └          └ C - V ┘
  26. #
  27. # Scoring function #3
  28. #      ┌
  29. #      │ 0 ,                V <= A
  30. #      │
  31. #      │          1
  32. #      │ ─────────────────────────────, A < V < B
  33. #      │          ┌       ┐2S(B+V-2A)  S > 0
  34. #      │          │ B - A │
  35. #      │    1 +   │───────│
  36. # ssf3 =  │          └ V - A ┘
  37. #      │                   f(B) = 0.5
  38. #      │          1
  39. #      │ ─────────────────────────────, B < V < C
  40. #      │          ┌       ┐2S(B+V-2C)  B < C
  41. #      │          │ C - B │        S > 0
  42. #      │    1 +   │───────│
  43. #      │          └ C - V ┘
  44. #      │
  45. #      │ 1 ,                V >= C
  46. #      └
  47. #
  48. # Scoring function #4
  49. #      ┌
  50. #      │          1
  51. #      │ ─────────────────────────────, V <= B
  52. #      │          ┌       ┐2S(B+V-2A)  S > 0
  53. #      │          │ B - A │
  54. #      │    1 +   │───────│
  55. # ssf4 =  │          └ V - A ┘
  56. #      │                   f(B) = 0.5
  57. #      │          1
  58. #      │ ─────────────────────────────, V > 0
  59. #      │          ┌       ┐2S(B+V-2C)  S > 0
  60. #      │          │ C - B │
  61. #      │    1 +   │───────│
  62. #      │          └ C - V ┘
  63. #      └
  64. #
  65. # Scoring function #5
  66. #      ┌
  67. #      │ 0 ,                 V <= A1
  68. #      │
  69. #      │          1             A1 < V < B1
  70. #      │ ─────────────────────────────── S1 > 0
  71. #      │       ┌         ┐2S1(B1+V-2A1)
  72. #      │       │ B1 - A1 │
  73. #      │       │ ────────│            f(B1) = 0.5
  74. #      │       └ V    - A1 ┘
  75. #      │
  76. #      │          1             B1 < V < C
  77. #      │ ─────────────────────────────── S1 > 0
  78. #      │       ┌       ┐2S1(B1+V-2C)
  79. #      │       │ C - B1│
  80. #      │       │ ──────│
  81. #      │       └ C - V ┘
  82. #      │
  83. # ssf5 =  │ 1 ,                 V = C
  84. #      │
  85. #      │          1             C < V < B2
  86. #      │ ─────────────────────────────── S2 < 0
  87. #      │       ┌        ┐2S2(B2+V-2C)
  88. #      │       │ B2 - C │
  89. #      │       │ ───────│
  90. #      │       └ V    - C ┘            f(B2) = 0.5
  91. #      │
  92. #      │          1             B2 < V < A2
  93. #      │ ─────────────────────────────── S2 < 0
  94. #      │       ┌        ┐2S2(B2+V-2A2)
  95. #      │       │ A2 - B2│
  96. #      │       │ ───────│
  97. #      │       └ A2 - V ┘
  98. #      │
  99. #      │ 0 ,                 V = A2
  100. #      └
  101. #
  102. # Scoring function #6
  103. #      ┌
  104. #      │          1             V <= B1
  105. #      │ ─────────────────────────────── S1 > 0
  106. #      │       ┌         ┐2S1(B1+V-2A1)
  107. #      │       │ B1 - A1 │
  108. #      │       │ ────────│            f(B1) = 0.5
  109. #      │       └ V    - A1 ┘
  110. #      │
  111. #      │          1             B1 < V < C
  112. #      │ ─────────────────────────────── S1 > 0
  113. #      │       ┌       ┐2S1(B1+V-2C)
  114. #      │       │ C - B1│
  115. #      │       │ ──────│
  116. #      │       └ C - V ┘
  117. #      │
  118. # ssf6 =  │ 1 ,                 V = C
  119. #      │
  120. #      │          1             C < V < B2
  121. #      │ ─────────────────────────────── S2 < 0
  122. #      │       ┌        ┐2S2(B2+V-2C)
  123. #      │       │ B2 - C │
  124. #      │       │ ───────│
  125. #      │       └ V    - C ┘            f(B2) = 0.5
  126. #      │
  127. #      │          1             B2 < V
  128. #      │ ─────────────────────────────── S2 < 0
  129. #      │       ┌        ┐2S2(B2+V-2A2)
  130. #      │       │ A2 - B2│
  131. #      │       │ ───────│
  132. #      │       └ A2 - V ┘
  133. #      └
  134. #
  135. # Scoring function #7
  136. #      ┌
  137. #      │ 1 ,                V <= A
  138. #      │
  139. #      │          1
  140. # ssf7 =  │ ─────────────────────────────, V > A
  141. #      │          ┌       ┐2S(B+V-2A)  B > A
  142. #      │          │ B - A │        S < 0
  143. #      │    1 +   │───────│        f(B) = 0.5
  144. #      │          └ V - A ┘
  145. #      └
  146. #
  147. # Scoring function #8
  148. #      ┌
  149. #      │          1
  150. #      │ ─────────────────────────────, V < C
  151. #      │          ┌       ┐2S(B+V-2C)  B < C
  152. # ssf8 =  │          │ C - B │        S > 0
  153. #      │    1 +   │───────│        f(B) = 0.5
  154. #      │          └ C - V ┘
  155. #      │
  156. #      │ 1 ,                V >= C
  157. #      └
  158. #
  159. # Scoring function #9
  160. #      ┌
  161. #      │ 1 ,                V <= A
  162. #      │
  163. #      │          1
  164. #      │ ─────────────────────────────, A < V <= B
  165. #      │          ┌       ┐2S(B+V-2A)  S < 0
  166. #      │          │ B - A │
  167. #      │    1 +   │───────│
  168. #      │          └ V - A ┘
  169. # ssf9 =  │                   f(B) = 0.5
  170. #      │
  171. #      │          1
  172. #      │ ─────────────────────────────, B < V < C
  173. #      │          ┌       ┐2S(B+V-2C)  S > 0
  174. #      │          │ C - B │
  175. #      │    1 +   │───────│
  176. #      │          └ C - V ┘
  177. #      │
  178. #      │ 0 ,                V >= C
  179. #      └
  180. #
  181. # Scoring function #10
  182. #      ┌
  183. #      │          1
  184. #      │ ─────────────────────────────, V <= B
  185. #      │          ┌       ┐2S(B+V-2A)  S < 0
  186. #      │          │ B - A │
  187. #      │    1 +   │───────│
  188. #      │          └ V - A ┘
  189. # ssf10 = │                   f(B) = 0.5
  190. #      │
  191. #      │          1
  192. #      │ ─────────────────────────────, V > B
  193. #      │          ┌       ┐2S(B+V-2C)  S > 0
  194. #      │          │ C - B │
  195. #      │    1 +   │───────│
  196. #      │          └ C - V ┘
  197. #      └
  198. #
  199. # Scoring function #11
  200. #      ┌
  201. #      │ 1 ,                 V <= A1
  202. #      │
  203. #      │          1
  204. #      │ ─────────────────────────────── A1 < V <= B1
  205. #      │       ┌         ┐2S1(B1+V-2A1) S1 < 0
  206. #      │       │ B1 - A1 │
  207. #      │       │ ────────│
  208. #      │       └ V    - A1 ┘            f(B1) = 0.5
  209. #      │
  210. #      │          1
  211. #      │ ─────────────────────────────── B1 < V < C
  212. #      │       ┌       ┐2S1(B1+V-2C)    S1 < 0
  213. #      │       │ C - B1│
  214. #      │       │ ──────│
  215. #      │       └ C - V ┘
  216. #      │
  217. # ssf11 = │ 0 ,                 V = C
  218. #      │
  219. #      │          1
  220. #      │ ─────────────────────────────── C < V <= B2
  221. #      │       ┌        ┐2S2(B2+V-2C)   S2 > 0
  222. #      │       │ B2 - C │
  223. #      │       │ ───────│
  224. #      │       └ V    - C ┘            f(B2) = 0.5
  225. #      │
  226. #      │          1
  227. #      │ ─────────────────────────────── B2 < V < A2
  228. #      │       ┌        ┐2S2(B2+V-2A2)  S2 > 0
  229. #      │       │ A2 - B2│
  230. #      │       │ ───────│
  231. #      │       └ A2 - V ┘
  232. #      │ 1 ,                 V >= A2
  233. #      └
  234. #
  235. # Scoring function #12
  236. #      ┌
  237. #      │          1
  238. #      │ ─────────────────────────────── V <= B1
  239. #      │       ┌         ┐2S1(B1+V-2A1) S1 < 0
  240. #      │       │ B1 - A1 │
  241. #      │       │ ────────│
  242. #      │       └ V    - A1 ┘            f(B1) = 0.5
  243. #      │
  244. #      │          1
  245. #      │ ─────────────────────────────── B1 < V < C
  246. #      │       ┌       ┐2S1(B1+V-2C)    S1 < 0
  247. #      │       │ C - B1│
  248. #      │       │ ──────│
  249. #      │       └ C - V ┘
  250. #      │
  251. # ssf12 = │ 0 ,                 V = C
  252. #      │
  253. #      │          1
  254. #      │ ─────────────────────────────── C < V <= B2
  255. #      │       ┌        ┐2S2(B2+V-2C)   S2 > 0
  256. #      │       │ B2 - C │
  257. #      │       │ ───────│
  258. #      │       └ V    - C ┘            f(B2) = 0.5
  259. #      │
  260. #      │          1
  261. #      │ ─────────────────────────────── B2 < V
  262. #      │       ┌        ┐2S2(B2+V-2A2)  S2 > 0
  263. #      │       │ A2 - B2│
  264. #      │       │ ───────│
  265. #      │       └ A2 - V ┘
  266. #      └
  267. #
  268. #
  269. BEGIN {
  270.     stderr = "stderr";
  271. }
  272.  
  273. function std_scr_f(fnum,A1,A2,B1,B2,C,V,S1,S2) {
  274.     local ssf;
  275.  
  276.     switch ( fnum ) {
  277.     case 1:
  278.         ssf = ssf1(A1,B1,C,V,S1);
  279.         break;
  280.     case 2:
  281.         ssf = ssf2(A1,B1,C,V,S1);
  282.         break;
  283.     case 3:
  284.         ssf = ssf3(A1,B1,C,V,S1);
  285.         break;
  286.     case 4:
  287.         ssf = ssf4(A1,B1,C,V,S1);
  288.         break;
  289.     case 5:
  290.         ssf = ssf5(A1,A2,B1,B2,C,V,S1,S2);
  291.         break;
  292.     case 6:
  293.         ssf = ssf6(A1,A2,B1,B2,C,V,S1,S2);
  294.         break;
  295.     case 7:
  296.         ssf = ssf7(A1,B1,C,V,S1);
  297.         break;
  298.     case 8:
  299.         ssf = ssf8(A1,B1,C,V,S1);
  300.         break;
  301.     case 9:
  302.         ssf = ssf9(A1,B1,C,V,S1);
  303.         break;
  304.     case 10:
  305.         ssf = ssf10(A1,B1,C,V,S1);
  306.         break;
  307.     case 11:
  308.         ssf = ssf11(A1,A2,B1,B2,C,V,S1,S2);
  309.         break;
  310.     case 12:
  311.         ssf = ssf12(A1,A2,B1,B2,C,V,S1,S2);
  312.         break;
  313.     default:
  314.         fprintf(stderr,"Improper Standard Scoring Function Number.\n");exit 100;
  315.         break;
  316.     }
  317.     return ssf;
  318. }
  319.  
  320. function ssf1(A,B,C,V,S) {
  321.     local ssf;
  322.  
  323.     if ( V <= A ) ssf = 0;
  324.       else ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
  325.     return ssf;
  326. }
  327.  
  328. function ssf2(A,B,C,V,S) {
  329.     local ssf;
  330.  
  331.     if ( V >= C ) ssf = 1;
  332.       else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
  333.     return ssf;
  334. }
  335.  
  336. function ssf3(A,B,C,V,S) {
  337.     local ssf;
  338.  
  339.     if ( V <= A ) ssf = 0;
  340.       else if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
  341.       else if ( V < C ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
  342.       else ssf = 1;
  343.     return ssf;
  344. }
  345.  
  346. function ssf4(A,B,C,V,S) {
  347.     local ssf;
  348.  
  349.     if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
  350.       else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
  351.     return ssf;
  352. }
  353.  
  354. function ssf5(A1,A2,B1,B2,C,V,S1,S2) {
  355.     local ssf;
  356.  
  357.     if ( V <= A1 ) ssf =0;
  358.       else if ( V < B1 )  ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
  359.       else if ( V < C )   ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
  360.       else if ( V == C)   ssf = 1;
  361.       else if ( V < B2 )  ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
  362.       else if ( V < A2 )  ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
  363.       else ssf = 0;
  364.     return ssf;
  365. }
  366.  
  367. function ssf6(A1,A2,B1,B2,V,C,S1,S2) {
  368.     local ssf;
  369.  
  370.     if ( V <= B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
  371.       else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
  372.       else if ( V == C ) ssf = 0;
  373.       else if ( V < B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
  374.       else ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
  375.     return ssf;
  376. }
  377.  
  378. function ssf7(A,B,V,C,S) {
  379.     local ssf;
  380.  
  381.     if ( V <= A ) ssf = 0;
  382.       else ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
  383.     return ssf;
  384. }
  385.  
  386. function ssf8(A,B,C,V,S) {
  387.     local ssf;
  388.  
  389.     if ( V <= A ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
  390.       else ssf = 0;
  391.     return ssf;
  392. }
  393.  
  394. function ssf9(A,B,C,V,S) {
  395.     local ssf;
  396.  
  397.     if ( V <= A ) ssf = 0;
  398.       else if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
  399.       else if ( V < C ) ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
  400.       else ssf = 0;
  401.     return ssf;
  402. }
  403.  
  404. function ssf10(A,B,C,V,S) {
  405.     local ssf;
  406.  
  407.     if ( V <= B ) ssf = 1/(1+((B-A)/(V-A))^(2*S*(B+V-2*A)));
  408.       else ssf = 1/(1+((C-B)/(C-V))^(2*S*(B+V-2*C)));
  409.     return ssf;
  410. }
  411.  
  412. function ssf11(A1,A2,B1,B2,C,V,S1,S2) {
  413.     local ssf;
  414.  
  415.     if ( V <= A1 ) ssf = 1;
  416.       else if ( V <= B1 )  ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
  417.       else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
  418.       else if ( V == C ) ssf = 0;
  419.       else if ( V <= B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
  420.       else if ( V < A2 ) ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
  421.       else ssf = 1;
  422.     return ssf;
  423. }
  424.  
  425. function ssf12(A1,A2,B1,B2,C,V,S1,S2) {
  426.     local ssf;
  427.  
  428.     if ( V <= B1 ) ssf = 1/(((B1-A1)/(V-A1))^(2*S1*(B1+V-2*A1)));
  429.       else if ( V < C ) ssf = 1/(((C-B1)/(C-V))^(2*S1*(B1+V-2*C)));
  430.       else if ( V == C ) ssf = 0;
  431.       else if ( V <= B2 ) ssf = 1/(((B2-C)/(V-C))^(2*S2*(B2+V-2*C)));
  432.       else ssf = 1/(((A2-B2)/(A2-V))^(2*S2*(B2+V-2*A2)));
  433.     return ssf;
  434. }
  435.  
  436. function ssf_prime(fnum,A1,A2,B1,B2,C,V,S1,S2) {
  437.     local ssfp = TRUE;
  438.     local k1, k2, k3, k4;
  439.     local i1, i2;
  440.     local ssf = std_scr_f(fnum,A1,A2,B1,B2,C,V,S1,S2);
  441.  
  442.     switch ( fnum ) {
  443.     case 1:
  444.         if ( V <= A1 ) ssfp = 0;
  445.           else {
  446.         k1 = B1 - A1;
  447.         k2 = A1;
  448.         k3 = -2*S1;
  449.         k4 = 4*S1*A1-2*S1*B1;
  450.         }
  451.         break;
  452.     case 2:
  453.         if ( V >= C ) ssfp = 0;
  454.           else {
  455.         k1 = B1 - C;
  456.         k2 = C;
  457.         k3 = -2*S1;
  458.         k4 = 4*S1*C-2*S1*B1;
  459.         }
  460.         break;
  461.     case 3:
  462.         if ( V <= A1 ) ssfp = 0;
  463.           else if ( V <= B1 ) {
  464.         k1 = B1-A1;
  465.         k2 = A1;
  466.         k3 = -2*S1;
  467.         k4 = 4*S1*A1-2*S1*B1;
  468.           } else if ( V < C ) {
  469.         k1 = B1-C;
  470.         k2 = C;
  471.         k3 = -2*S1;
  472.         k4 = 4*S1*C-2*S1*B1;
  473.         } else ssfp = 0;
  474.         break;
  475.     case 4:
  476.         if ( V <= B1 ) {
  477.         k1 = B1-A1;
  478.         k2 = A1;
  479.         k3 = -2*S1;
  480.         k4 = 4*S1*A1-2*S1*B1;
  481.           } else {
  482.         k1 = B1-C;
  483.         k2 = C;
  484.         k3 = -2*S1;
  485.         k4 = 4*S1*C-2*S1*B;
  486.         }
  487.         break;
  488.     case 5:
  489.         if ( V <= A1 ) ssfp = 0;
  490.           else if ( V <= B1 ) {
  491.         k1 = B1-A1;
  492.         k2 = A1;
  493.         k3 = -2*S1;
  494.         k4 = 4*S1*A1-2*S1*B1;
  495.           } else if ( V < C ) {
  496.         k1 = B1-C;
  497.         k2 = C;
  498.         k3 = -2*S1;
  499.         k4 = 4*S1*C-2*S1*B1;
  500.           } else if ( V == C ) ssfp = 0;
  501.           else if ( V <= B2 ) {
  502.         k1 = B2-C;
  503.         k2 = A2;
  504.         k3 = -2*S2;
  505.         k4 = 4*S2*C-2*S2*B2;
  506.           } else if ( V < A2 ) {
  507.         k1 = B2-A2;
  508.         k2 = A2;
  509.         k3 = -2*S2;
  510.         k4 = 4*S2*A2-2*S2*B2;
  511.           } else ssfp = 0;
  512.         break;
  513.     case 6:
  514.         if ( V <= B1 ) {
  515.         k1 = B1-A1;
  516.         k2 = A1;
  517.         k3 = -2*S1;
  518.         k4 = 4*S1*A1-2*S1*B1;
  519.           } else if ( V < C ) {
  520.         k1 = B1-C;
  521.         k2 = C;
  522.         k3 = -2*S1;
  523.         k4 = 4*S1*C-2*S1*B1;
  524.           } else if ( V == C ) ssfp = 0;
  525.           else if ( V <= B2 ) {
  526.         k1 = B2-C;
  527.         k2 = C;
  528.         k3 = -2*S2;
  529.         k4 = 4*S2*C-2*S2*B2;
  530.           } else {
  531.         k1 = B2-A2;
  532.         k2 = A2;
  533.         k3 = -2*S2;
  534.         k4 = 4*S2*A2-2*S2*B2;
  535.         }
  536.         break;
  537.     case 7:
  538.         if ( V <= A1 ) ssfp = 0;
  539.           else {
  540.         k1 = B1 - A1;
  541.         k2 = A1;
  542.         k3 = -2*S1;
  543.         k4 = 4*S1*A1-2*S1*B1;
  544.         }
  545.         break;
  546.     case 8:
  547.         if ( V < C ) {
  548.         k1 = B1 - C;
  549.         k2 = C;
  550.         k3 = -2*S1;
  551.         k4 = 4*S1*C-2*S1*B1;
  552.         } else ssfp = 0;
  553.         break;
  554.     case 9:
  555.         if ( V <= A1 ) ssfp = 0;
  556.           else if ( V <= B1 ) {
  557.         k1 = B1 - A1;
  558.         k2 = A1;
  559.         k3 = -2*S1;
  560.         k4 = 4*S1*A1-2*S1*B1;
  561.           } else {
  562.         k1 = B1 - C;
  563.         k2 = C;
  564.         k3 = -2*S1;
  565.         k4 = 4*S1*C-2*S1*B1;
  566.         }
  567.         break;
  568.     case 10:
  569.         if ( V <= B1 ) {
  570.         k1 = B1 - A1;
  571.         k2 = A1;
  572.         k3 = -2*S1;
  573.         k4 = 4*S1*A1-2*S1*B1;
  574.           } else {
  575.         k1 = B1 - C;
  576.         k2 = C;
  577.         k3 = -2*S1;
  578.         k4 = 4*S1*C-2*S1*B1;
  579.         }
  580.         break;
  581.     case 11:
  582.         if ( V <= A1 ) ssfp = 0;
  583.           else if ( V <= B1 ) {
  584.         k1 = B1 - A1;
  585.         k2 = A1;
  586.         k3 = -2*S1;
  587.         k4 = 4*S1*A1-2*S1*B1;
  588.           } else if ( V < C ) {
  589.         k1 = B1 - C;
  590.         k2 = C;
  591.         k3 = -2*S1;
  592.         k4 = 4*S1*C-2*S1*B1;
  593.           } else if ( V == C ) ssfp = 0;
  594.           else if ( V <= B2 ) {
  595.         k1 = B2 - C;
  596.         k2 = C;
  597.         k3 = -2*S2;
  598.         k4 = 4*S2*C-2*S2*B2;
  599.           } else if ( V < A2 ) {
  600.         k1 = B2 - A2;
  601.         k2 = A2;
  602.         k3 = -2*S2;
  603.         k4 = 4*S2*A2-2*S2*B2;
  604.         } else ssfp = 0;
  605.         break;
  606.     case 12:
  607.         if ( V <= B1 ) {
  608.         k1 = B1 - A1;
  609.         k2 = A1;
  610.         k3 = -2*S1;
  611.         k4 = 4*S1*A1-2*S1*B1;
  612.           } else if ( V < C ) {
  613.         k1 = B1 - C;
  614.         k2 = C;
  615.         k3 = -2*S1;
  616.         k4 = 4*S1*C-2*S1*B1;
  617.           } else if ( V == C ) ssfp = 0;
  618.           else if ( V <= B2 ) {
  619.         k1 = B2 - C;
  620.         k2 = C;
  621.         k3 = -2*S2;
  622.         k4 = 4*S2*C-2*S2*B2;
  623.           } else if ( V < A2 ) {
  624.         k1 = B2 - A2;
  625.         k2 = A2;
  626.         k3 = -2*S2;
  627.         k4 = 4*S2*A2-2*S2*B2;
  628.         } else ssfp = 0;
  629.         break;
  630.     }
  631.     if ( ssfp ) {
  632.     i1 = k3*V+k4;
  633.     i2 = (1/ssf)-1;
  634.     ssfp = -ssf*ssf*(i1/k1)*i2^(1-1/i1)+k3*(log(i2)^(1/i1)+i2);
  635.     }
  636.     return ssfp;
  637. }
  638.