redscript-mc 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/README.md +119 -313
  3. package/README.zh.md +118 -314
  4. package/ROADMAP.md +5 -5
  5. package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
  6. package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
  7. package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
  8. package/dist/data/impl_test/function/load.mcfunction +1 -0
  9. package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
  10. package/dist/data/minecraft/tags/function/load.json +5 -0
  11. package/dist/data/playground/function/load.mcfunction +1 -0
  12. package/dist/data/playground/function/start.mcfunction +4 -0
  13. package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
  14. package/dist/data/playground/function/stop.mcfunction +5 -0
  15. package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
  16. package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
  17. package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
  18. package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
  19. package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
  20. package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
  21. package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
  22. package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
  23. package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
  24. package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
  25. package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
  26. package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
  27. package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
  28. package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
  29. package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
  30. package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
  31. package/dist/data/test/function/load.mcfunction +1 -0
  32. package/dist/data/test/function/say_at.mcfunction +6 -0
  33. package/dist/data/test/function/test.mcfunction +4 -0
  34. package/dist/pack.mcmeta +6 -0
  35. package/dist/package.json +1 -1
  36. package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
  37. package/dist/src/__tests__/formatter-extra.test.js +123 -0
  38. package/dist/src/__tests__/global-vars.test.d.ts +13 -0
  39. package/dist/src/__tests__/global-vars.test.js +156 -0
  40. package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
  41. package/dist/src/__tests__/lint/new-rules.test.js +402 -0
  42. package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
  43. package/dist/src/__tests__/lsp-rename.test.js +157 -0
  44. package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
  45. package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
  46. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
  47. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
  48. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
  49. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
  50. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
  51. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
  52. package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
  53. package/dist/src/__tests__/mc-syntax.test.js +4 -1
  54. package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
  55. package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
  56. package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
  57. package/dist/src/__tests__/optimizer-cse.test.js +226 -0
  58. package/dist/src/__tests__/parser.test.js +4 -13
  59. package/dist/src/__tests__/repl-server-extra.test.js +6 -7
  60. package/dist/src/__tests__/repl-server.test.js +5 -7
  61. package/dist/src/__tests__/stdlib/queue.test.js +6 -6
  62. package/dist/src/cli.js +0 -0
  63. package/dist/src/lexer/index.js +2 -1
  64. package/dist/src/lint/index.d.ts +12 -5
  65. package/dist/src/lint/index.js +730 -5
  66. package/dist/src/lsp/main.js +0 -0
  67. package/dist/src/mc-test/client.d.ts +21 -0
  68. package/dist/src/mc-test/client.js +34 -0
  69. package/dist/src/mir/lower.js +108 -6
  70. package/dist/src/optimizer/interprocedural.js +37 -2
  71. package/dist/src/parser/decl-parser.d.ts +19 -0
  72. package/dist/src/parser/decl-parser.js +323 -0
  73. package/dist/src/parser/expr-parser.d.ts +46 -0
  74. package/dist/src/parser/expr-parser.js +759 -0
  75. package/dist/src/parser/index.d.ts +8 -129
  76. package/dist/src/parser/index.js +13 -2262
  77. package/dist/src/parser/stmt-parser.d.ts +28 -0
  78. package/dist/src/parser/stmt-parser.js +577 -0
  79. package/dist/src/parser/type-parser.d.ts +20 -0
  80. package/dist/src/parser/type-parser.js +257 -0
  81. package/dist/src/parser/utils.d.ts +34 -0
  82. package/dist/src/parser/utils.js +141 -0
  83. package/docs/dev/README-mc-integration-tests.md +141 -0
  84. package/docs/lint-rules.md +162 -0
  85. package/docs/stdlib/bigint.md +2 -0
  86. package/editors/vscode/README.md +63 -41
  87. package/editors/vscode/out/extension.js +1881 -1776
  88. package/editors/vscode/out/lsp-server.js +4257 -3651
  89. package/editors/vscode/package-lock.json +3 -3
  90. package/editors/vscode/package.json +1 -1
  91. package/examples/loops-demo.mcrs +87 -0
  92. package/package.json +1 -1
  93. package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
  94. package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
  95. package/redscript-docs/docs/en/stdlib/bits.md +292 -0
  96. package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
  97. package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
  98. package/redscript-docs/docs/en/stdlib/color.md +353 -0
  99. package/redscript-docs/docs/en/stdlib/combat.md +88 -0
  100. package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
  101. package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
  102. package/redscript-docs/docs/en/stdlib/easing.md +558 -0
  103. package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
  104. package/redscript-docs/docs/en/stdlib/effects.md +324 -0
  105. package/redscript-docs/docs/en/stdlib/events.md +3 -0
  106. package/redscript-docs/docs/en/stdlib/expr.md +45 -0
  107. package/redscript-docs/docs/en/stdlib/fft.md +141 -0
  108. package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
  109. package/redscript-docs/docs/en/stdlib/graph.md +259 -0
  110. package/redscript-docs/docs/en/stdlib/heap.md +185 -0
  111. package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
  112. package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
  113. package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
  114. package/redscript-docs/docs/en/stdlib/list.md +559 -0
  115. package/redscript-docs/docs/en/stdlib/map.md +140 -0
  116. package/redscript-docs/docs/en/stdlib/math.md +193 -0
  117. package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
  118. package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
  119. package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
  120. package/redscript-docs/docs/en/stdlib/noise.md +244 -0
  121. package/redscript-docs/docs/en/stdlib/ode.md +253 -0
  122. package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
  123. package/redscript-docs/docs/en/stdlib/particles.md +311 -0
  124. package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
  125. package/redscript-docs/docs/en/stdlib/physics.md +493 -0
  126. package/redscript-docs/docs/en/stdlib/player.md +78 -0
  127. package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
  128. package/redscript-docs/docs/en/stdlib/queue.md +134 -0
  129. package/redscript-docs/docs/en/stdlib/random.md +223 -0
  130. package/redscript-docs/docs/en/stdlib/result.md +143 -0
  131. package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
  132. package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
  133. package/redscript-docs/docs/en/stdlib/sets.md +101 -0
  134. package/redscript-docs/docs/en/stdlib/signal.md +400 -0
  135. package/redscript-docs/docs/en/stdlib/sort.md +104 -0
  136. package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
  137. package/redscript-docs/docs/en/stdlib/state.md +142 -0
  138. package/redscript-docs/docs/en/stdlib/strings.md +154 -0
  139. package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
  140. package/redscript-docs/docs/en/stdlib/teams.md +153 -0
  141. package/redscript-docs/docs/en/stdlib/timer.md +246 -0
  142. package/redscript-docs/docs/en/stdlib/vec.md +158 -0
  143. package/redscript-docs/docs/en/stdlib/world.md +298 -0
  144. package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
  145. package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
  146. package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
  147. package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
  148. package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
  149. package/redscript-docs/docs/zh/stdlib/color.md +353 -0
  150. package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
  151. package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
  152. package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
  153. package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
  154. package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
  155. package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
  156. package/redscript-docs/docs/zh/stdlib/events.md +3 -0
  157. package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
  158. package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
  159. package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
  160. package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
  161. package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
  162. package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
  163. package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
  164. package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
  165. package/redscript-docs/docs/zh/stdlib/list.md +561 -0
  166. package/redscript-docs/docs/zh/stdlib/map.md +132 -0
  167. package/redscript-docs/docs/zh/stdlib/math.md +193 -0
  168. package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
  169. package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
  170. package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
  171. package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
  172. package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
  173. package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
  174. package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
  175. package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
  176. package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
  177. package/redscript-docs/docs/zh/stdlib/player.md +78 -0
  178. package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
  179. package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
  180. package/redscript-docs/docs/zh/stdlib/random.md +222 -0
  181. package/redscript-docs/docs/zh/stdlib/result.md +147 -0
  182. package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
  183. package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
  184. package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
  185. package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
  186. package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
  187. package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
  188. package/redscript-docs/docs/zh/stdlib/state.md +134 -0
  189. package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
  190. package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
  191. package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
  192. package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
  193. package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
  194. package/redscript-docs/docs/zh/stdlib/world.md +289 -0
  195. package/src/__tests__/formatter-extra.test.ts +139 -0
  196. package/src/__tests__/global-vars.test.ts +171 -0
  197. package/src/__tests__/lint/new-rules.test.ts +437 -0
  198. package/src/__tests__/lsp-rename.test.ts +171 -0
  199. package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
  200. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
  201. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
  202. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
  203. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
  204. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
  205. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
  206. package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
  207. package/src/__tests__/mc-syntax.test.ts +3 -0
  208. package/src/__tests__/monomorphize-coverage.test.ts +220 -0
  209. package/src/__tests__/optimizer-cse.test.ts +250 -0
  210. package/src/__tests__/parser.test.ts +4 -13
  211. package/src/__tests__/repl-server-extra.test.ts +6 -6
  212. package/src/__tests__/repl-server.test.ts +5 -6
  213. package/src/__tests__/stdlib/queue.test.ts +6 -6
  214. package/src/lexer/index.ts +2 -1
  215. package/src/lint/index.ts +713 -5
  216. package/src/mc-test/client.ts +40 -0
  217. package/src/mir/lower.ts +111 -2
  218. package/src/optimizer/interprocedural.ts +40 -2
  219. package/src/parser/decl-parser.ts +349 -0
  220. package/src/parser/expr-parser.ts +838 -0
  221. package/src/parser/index.ts +17 -2558
  222. package/src/parser/stmt-parser.ts +585 -0
  223. package/src/parser/type-parser.ts +276 -0
  224. package/src/parser/utils.ts +173 -0
  225. package/src/stdlib/queue.mcrs +19 -6
@@ -0,0 +1,193 @@
1
+ # Math
2
+
3
+ > Auto-generated from `src/stdlib/math.mcrs` — do not edit manually.
4
+
5
+ ## API
6
+
7
+ - [abs](#abs)
8
+ - [sign](#sign)
9
+ - [min](#min)
10
+ - [max](#max)
11
+ - [clamp](#clamp)
12
+ - [lerp](#lerp)
13
+ - [sqrt_fixed](#sqrt-fixed)
14
+
15
+ ---
16
+
17
+ ## `abs` <Badge type="info" text="v1.0.0" />
18
+
19
+ Return the absolute value of x.
20
+
21
+ ```redscript
22
+ fn abs<T>(x: T) -> T
23
+ ```
24
+
25
+ **Parameters**
26
+
27
+ | Parameter | Description |
28
+ |-----------|-------------|
29
+ | `x` | The input value (any numeric type T) |
30
+
31
+ **Returns:** x if x >= 0, else -x
32
+
33
+ **Example**
34
+
35
+ ```redscript
36
+ let a = abs(-5) // result: 5
37
+ let b = abs(3) // result: 3
38
+ ```
39
+
40
+ ---
41
+
42
+ ## `sign` <Badge type="info" text="v1.0.0" />
43
+
44
+ Return the sign of x: 1, 0, or -1.
45
+
46
+ ```redscript
47
+ fn sign(x: int) -> int
48
+ ```
49
+
50
+ **Parameters**
51
+
52
+ | Parameter | Description |
53
+ |-----------|-------------|
54
+ | `x` | Input integer |
55
+
56
+ **Returns:** 1 if x > 0, -1 if x < 0, 0 if x == 0
57
+
58
+ **Example**
59
+
60
+ ```redscript
61
+ let s = sign(-42) // result: -1
62
+ ```
63
+
64
+ ---
65
+
66
+ ## `min` <Badge type="info" text="v1.0.0" />
67
+
68
+ Return the smaller of two values.
69
+
70
+ ```redscript
71
+ fn min<T>(a: T, b: T) -> T
72
+ ```
73
+
74
+ **Parameters**
75
+
76
+ | Parameter | Description |
77
+ |-----------|-------------|
78
+ | `a` | First value |
79
+ | `b` | Second value |
80
+
81
+ **Returns:** a if a < b, else b
82
+
83
+ **Example**
84
+
85
+ ```redscript
86
+ let m = min(3, 7) // result: 3
87
+ ```
88
+
89
+ ---
90
+
91
+ ## `max` <Badge type="info" text="v1.0.0" />
92
+
93
+ Return the larger of two values.
94
+
95
+ ```redscript
96
+ fn max<T>(a: T, b: T) -> T
97
+ ```
98
+
99
+ **Parameters**
100
+
101
+ | Parameter | Description |
102
+ |-----------|-------------|
103
+ | `a` | First value |
104
+ | `b` | Second value |
105
+
106
+ **Returns:** a if a > b, else b
107
+
108
+ **Example**
109
+
110
+ ```redscript
111
+ let m = max(3, 7) // result: 7
112
+ ```
113
+
114
+ ---
115
+
116
+ ## `clamp` <Badge type="info" text="v1.0.0" />
117
+
118
+ Clamp x to the range [lo, hi].
119
+
120
+ ```redscript
121
+ fn clamp<T>(x: T, lo: T, hi: T) -> T
122
+ ```
123
+
124
+ **Parameters**
125
+
126
+ | Parameter | Description |
127
+ |-----------|-------------|
128
+ | `x` | Input value |
129
+ | `lo` | Lower bound (inclusive) |
130
+ | `hi` | Upper bound (inclusive) |
131
+
132
+ **Returns:** lo if x < lo; hi if x > hi; otherwise x
133
+
134
+ **Example**
135
+
136
+ ```redscript
137
+ let c = clamp(150, 0, 100) // result: 100
138
+ let d = clamp(50, 0, 100) // result: 50
139
+ ```
140
+
141
+ ---
142
+
143
+ ## `lerp` <Badge type="info" text="v1.0.0" />
144
+
145
+ Linear interpolation between a and b using fixed-point t in [0, 1000].
146
+
147
+ ```redscript
148
+ fn lerp(a: int, b: int, t: int) -> int
149
+ ```
150
+
151
+ **Parameters**
152
+
153
+ | Parameter | Description |
154
+ |-----------|-------------|
155
+ | `a` | Start value |
156
+ | `b` | End value |
157
+ | `t` | Interpolation factor ×1000 (0 = a, 1000 = b) |
158
+
159
+ **Returns:** a + (b - a) * t / 1000
160
+
161
+ **Example**
162
+
163
+ ```redscript
164
+ let v = lerp(0, 1000, 500) // result: 500
165
+ let w = lerp(100, 200, 750) // result: 175
166
+ ```
167
+
168
+ ---
169
+
170
+ ## `sqrt_fixed` <Badge type="info" text="v1.0.0" />
171
+
172
+ Fixed-point square root (scale = 1000).
173
+
174
+ ```redscript
175
+ fn sqrt_fixed(x: int) -> int
176
+ ```
177
+
178
+ **Parameters**
179
+
180
+ | Parameter | Description |
181
+ |-----------|-------------|
182
+ | `x` | Input value ×1000 (i.e. 2.0 → 2000) |
183
+
184
+ **Returns:** sqrt(x/1000) × 1000
185
+
186
+ **Example**
187
+
188
+ ```redscript
189
+ let s = sqrt_fixed(2000) // result: ~1414 (√2 × 1000)
190
+ let t = sqrt_fixed(1000) // result: 1000 (√1 × 1000)
191
+ ```
192
+
193
+ ---
@@ -0,0 +1,149 @@
1
+ # Math_hp
2
+
3
+ > Auto-generated from `src/stdlib/math_hp.mcrs` — do not edit manually.
4
+
5
+ ## API
6
+
7
+ - [double_mul_fixed](#double-mul-fixed)
8
+ - [double_mul](#double-mul)
9
+ - [ln_hp](#ln-hp)
10
+ - [ln_5term](#ln-5term)
11
+ - [double_sqrt](#double-sqrt)
12
+ - [pow_fast](#pow-fast)
13
+
14
+ ---
15
+
16
+ ## `double_mul_fixed` <Badge type="info" text="v1.3.0" />
17
+
18
+ Multiply a double-precision value `d` by a fixed-point integer `f` (× 10000)
19
+ using a macro trick to keep all arithmetic in IEEE 754 double precision.
20
+
21
+ ```redscript
22
+ fn double_mul_fixed(d: double, f: int): double
23
+ ```
24
+
25
+ **Parameters**
26
+
27
+ | Parameter | Description |
28
+ |-----------|-------------|
29
+ | `d` | Double operand (stored in NBT as IEEE 754 double) |
30
+ | `f` | Fixed-point multiplier × 10000 (e.g. 15000 = 1.5) |
31
+
32
+ **Returns:** d × (f / 10000) as a double
33
+
34
+ **Example**
35
+
36
+ ```redscript
37
+ let r: double = double_mul_fixed(3.14d, 20000); // 6.28 (3.14 × 2.0)
38
+ ```
39
+
40
+ ---
41
+
42
+ ## `double_mul` <Badge type="info" text="v1.3.0" />
43
+
44
+ Multiply two doubles via scoreboard integer approximation (~4 decimal digits).
45
+ ⚠ Overflows for |a| × |b| > ~21474. Use `double_mul_fixed` for higher precision.
46
+
47
+ ```redscript
48
+ fn double_mul(a: double, b: double): double
49
+ ```
50
+
51
+ **Parameters**
52
+
53
+ | Parameter | Description |
54
+ |-----------|-------------|
55
+ | `a` | First factor (double) |
56
+ | `b` | Second factor (double) |
57
+
58
+ **Returns:** a × b (scoreboard approximation, ~4 sig. figs.)
59
+
60
+ ---
61
+
62
+ ## `ln_hp` <Badge type="info" text="v1.3.0" />
63
+
64
+ High-precision natural logarithm via one Newton refinement of the 5-term atanh series.
65
+ Precision ~8–9 significant digits. Valid for x ∈ [100, 1 000 000] (× 10000 scale).
66
+
67
+ ```redscript
68
+ fn ln_hp(x: int): int
69
+ ```
70
+
71
+ **Parameters**
72
+
73
+ | Parameter | Description |
74
+ |-----------|-------------|
75
+ | `x` | Input value × 10000 (e.g. 10000 = 1.0, 27183 ≈ e) |
76
+
77
+ **Returns:** ln(x / 10000) × 10000
78
+
79
+ **Example**
80
+
81
+ ```redscript
82
+ let r: int = ln_hp(27183); // ≈ 10000 (ln(e) ≈ 1.0)
83
+ ```
84
+
85
+ ---
86
+
87
+ ## `ln_5term` <Badge type="info" text="v1.3.0" />
88
+
89
+ Natural logarithm using a 5-term atanh series (more accurate than the 3-term `ln()`).
90
+ Max error ≈ 0.000002. Valid for x ∈ [100, 1 000 000] (× 10000 scale).
91
+
92
+ ```redscript
93
+ fn ln_5term(x: int): int
94
+ ```
95
+
96
+ **Parameters**
97
+
98
+ | Parameter | Description |
99
+ |-----------|-------------|
100
+ | `x` | Input value × 10000 |
101
+
102
+ **Returns:** ln(x / 10000) × 10000
103
+
104
+ ---
105
+
106
+ ## `double_sqrt` <Badge type="info" text="v1.3.0" />
107
+
108
+ Square root of a double-precision value, returned as a double.
109
+ Internally converts to × 10000 fixed-point, applies `isqrt`, then converts back.
110
+
111
+ ```redscript
112
+ fn double_sqrt(x: double): double
113
+ ```
114
+
115
+ **Parameters**
116
+
117
+ | Parameter | Description |
118
+ |-----------|-------------|
119
+ | `x` | Input double (must be ≥ 0) |
120
+
121
+ **Returns:** √x as a double
122
+
123
+ ---
124
+
125
+ ## `pow_fast` <Badge type="info" text="v1.3.0" />
126
+
127
+ Double base raised to an integer exponent using binary exponentiation (O(log n)).
128
+ Handles negative exponents via `double_div`.
129
+
130
+ ```redscript
131
+ fn pow_fast(base: double, exp_val: int): double
132
+ ```
133
+
134
+ **Parameters**
135
+
136
+ | Parameter | Description |
137
+ |-----------|-------------|
138
+ | `base` | Base value (double) |
139
+ | `exp_val` | Integer exponent (may be negative) |
140
+
141
+ **Returns:** base^exp_val as a double
142
+
143
+ **Example**
144
+
145
+ ```redscript
146
+ let r: double = pow_fast(2.0d, 10); // 1024.0
147
+ ```
148
+
149
+ ---