Skip to content

Commit 73b58e0

Browse files
committed
arctan
1 parent 3d676db commit 73b58e0

File tree

1 file changed

+45
-33
lines changed

1 file changed

+45
-33
lines changed

src/main/java/org/devore/utils/NumberUtils.java

Lines changed: 45 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class NumberUtils {
1717

1818
/**
1919
* 使用Machin公式将 π 近似
20+
*
2021
* @return π 近似值
2122
*/
2223
private static BigDecimal approximatePi() {
@@ -32,9 +33,10 @@ private static BigDecimal approximatePi() {
3233

3334
/**
3435
* 使用泰勒级数展开计算arctan(x)
35-
* @param x 输入值,|x| ≤ 1时效果最好
36-
* @param mc 精度上下文
37-
* @return arctan(x)
36+
*
37+
* @param x 输入值,|x| ≤ 1时效果最好
38+
* @param mc 精度上下文
39+
* @return arctan(x)
3840
*/
3941
public static BigDecimal arctan(BigDecimal x, MathContext mc) {
4042
if (x.compareTo(BigDecimal.ZERO) == 0)
@@ -48,7 +50,7 @@ public static BigDecimal arctan(BigDecimal x, MathContext mc) {
4850
int n = 0;
4951
boolean add = true;
5052
while (term.abs().compareTo(tolerance) >= 0) {
51-
result = add? result.add(term, mc): result.subtract(term, mc);
53+
result = add ? result.add(term, mc) : result.subtract(term, mc);
5254
n++;
5355
term = term.multiply(xSquared, mc)
5456
.multiply(BigDecimal.valueOf(2L * n - 1), mc)
@@ -68,9 +70,10 @@ public static BigDecimal arctan(BigDecimal x, MathContext mc) {
6870

6971
/**
7072
* 将角度缩小到范围[-π,π]
73+
*
7174
* @param angle 角度
7275
* @param mc 精度
73-
* @return [-π, π]
76+
* @return [-π, π]
7477
*/
7578
private static BigDecimal reduceAngle(BigDecimal angle, MathContext mc) {
7679
angle = angle.remainder(TWO_PI, mc);
@@ -83,8 +86,9 @@ else if (angle.compareTo(PI.negate()) < 0)
8386

8487
/**
8588
* 判断BigDecimal是否为整数
86-
* @param decimal BigDecimal
87-
* @return 结果
89+
*
90+
* @param decimal BigDecimal
91+
* @return 结果
8892
*/
8993
public static boolean isInt(BigDecimal decimal) {
9094
BigDecimal stripped = decimal.stripTrailingZeros();
@@ -93,9 +97,10 @@ public static boolean isInt(BigDecimal decimal) {
9397

9498
/**
9599
* 使用泰勒级数展开计算sin(x)
96-
* @param x x
97-
* @param mc 精度
98-
* @return sin(x)
100+
*
101+
* @param x x
102+
* @param mc 精度
103+
* @return sin(x)
99104
*/
100105
public static BigDecimal sin(BigDecimal x, MathContext mc) {
101106
x = reduceAngle(x, mc);
@@ -116,9 +121,10 @@ public static BigDecimal sin(BigDecimal x, MathContext mc) {
116121

117122
/**
118123
* 使用泰勒级数展开计算cos(x)
119-
* @param x x
120-
* @param mc 精度
121-
* @return cos(x)
124+
*
125+
* @param x x
126+
* @param mc 精度
127+
* @return cos(x)
122128
*/
123129
public static BigDecimal cos(BigDecimal x, MathContext mc) {
124130
x = reduceAngle(x, mc);
@@ -139,9 +145,10 @@ public static BigDecimal cos(BigDecimal x, MathContext mc) {
139145

140146
/**
141147
* 将tan计算为sin(x)/cos(x)
142-
* @param x x
143-
* @param mc 精度
144-
* @return tan(x)
148+
*
149+
* @param x x
150+
* @param mc 精度
151+
* @return tan(x)
145152
*/
146153
public static BigDecimal tan(BigDecimal x, MathContext mc) {
147154
BigDecimal cos = cos(x, mc);
@@ -152,9 +159,10 @@ public static BigDecimal tan(BigDecimal x, MathContext mc) {
152159

153160
/**
154161
* 使用牛顿法计算BigDecimal的平方根
155-
* @param x x
156-
* @param mc 精度
157-
* @return √x
162+
*
163+
* @param x x
164+
* @param mc 精度
165+
* @return √x
158166
*/
159167
public static BigDecimal sqrt(BigDecimal x, MathContext mc) {
160168
if (x.compareTo(BigDecimal.ZERO) < 0)
@@ -175,10 +183,11 @@ public static BigDecimal sqrt(BigDecimal x, MathContext mc) {
175183

176184
/**
177185
* 计算BigDecimal的x^y
178-
* @param x x
179-
* @param y y
180-
* @param mc 精度
181-
* @return x^y
186+
*
187+
* @param x x
188+
* @param y y
189+
* @param mc 精度
190+
* @return x^y
182191
*/
183192
public static BigDecimal pow(BigDecimal x, BigDecimal y, MathContext mc) {
184193
if (y.compareTo(BigDecimal.ZERO) == 0)
@@ -200,10 +209,11 @@ public static BigDecimal pow(BigDecimal x, BigDecimal y, MathContext mc) {
200209

201210
/**
202211
* 计算BigDecimal的x^y, 其中y为整数
203-
* @param x x
204-
* @param y y
205-
* @param mc 精度
206-
* @return x^y
212+
*
213+
* @param x x
214+
* @param y y
215+
* @param mc 精度
216+
* @return x^y
207217
*/
208218
private static BigDecimal powInt(BigDecimal x, BigInteger y, MathContext mc) {
209219
if (y.compareTo(BigInteger.ZERO) < 0)
@@ -219,9 +229,10 @@ private static BigDecimal powInt(BigDecimal x, BigInteger y, MathContext mc) {
219229

220230
/**
221231
* 使用泰勒级数计算ln(x)
222-
* @param x x
223-
* @param mc 精度
224-
* @return ln(x)
232+
*
233+
* @param x x
234+
* @param mc 精度
235+
* @return ln(x)
225236
*/
226237
public static BigDecimal ln(BigDecimal x, MathContext mc) {
227238
if (x.compareTo(BigDecimal.ZERO) <= 0)
@@ -244,9 +255,10 @@ public static BigDecimal ln(BigDecimal x, MathContext mc) {
244255

245256
/**
246257
* 使用泰勒级数计算e^x
247-
* @param x x
248-
* @param mc 精度
249-
* @return e^x
258+
*
259+
* @param x x
260+
* @param mc 精度
261+
* @return e^x
250262
*/
251263
public static BigDecimal exp(BigDecimal x, MathContext mc) {
252264
BigDecimal result = BigDecimal.ONE;

0 commit comments

Comments
 (0)