λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Java

[Java] λΆ€λ™μ†Œμˆ˜μ  였차 κ΄€λ¦¬ν•˜κΈ°

λΆ€λ™μ†Œμˆ˜μ μ˜ 였차

μ»΄ν“¨ν„°λŠ” 2μ§„μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€μˆ˜λ₯Ό κ·Όμ‚¬μΉ˜λ‘œ ν‘œν˜„ν•œλ‹€. κ·Έλž˜μ„œ μ•„λž˜μ™€ κ°™μ€ μž‘은 μ˜€μ°¨κ°€ λ°œμƒν•  μˆ˜ μžˆλ‹€. 

double a = 0.2 + 0.1;	
System.out.println(a);	// output: 0.30000000000000004

 

λŒ€ν•™κ΅ 1ν•™λ…„ 1ν•™κΈ° λ•Œ λ°°μš°λŠ” 상식 같은 λ‚΄μš©μ΄λ‹€. 이걸 λͺ¨λ₯΄μ§€λŠ” μ•ŠλŠ”λ‹€. 근데 μžŠμ„ λ§Œν•  λ•Œμ―€ λ‚˜νƒ€λ‚˜ λ‚  μ†μƒν•˜κ²Œ ν•œλ‹€. κ·Έλž˜μ„œ λ‹€μ‹œλŠ” 이런 μ‹€μˆ˜λ₯Ό λ²”ν•˜μ§€ μ•Šκ² λ‹€λŠ” μ˜μ§€λ‘œ λΆ€λ™μ†Œμˆ˜μ  였차λ₯Ό κ΄€λ¦¬ν•˜λŠ” 법을 적어본닀.


BigDecimal μ‚¬μš©ν•˜κΈ°

Javaμ—μ„œλŠ” BigDecimal 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μ •ν™•ν•œ μ†Œμˆ˜μ  연산이 κ°€λŠ₯ν•˜λ‹€. λ‹¨μ μœΌλ‘œλŠ” μ†λ„κ°€ λŠλ¦¬λ‹€λŠ” μ κ³Ό μ‚¬μš©λ²•이 μ‘°κΈˆ λΆˆνŽΈν•˜λ‹€λŠ” μ μ΄ μžˆλ‹€.

BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");	
System.out.println(a.add(b));	// output: 0.3

 

 

μ£Όμ˜ν•  점은 μ΄ˆκΈ°ν™”ν•  λ•Œ double νƒ€μž…을 κ·ΈλŒ€λ‘œ λ„˜κ²¨μ£Όλ©΄ μ˜€μ°¨λ„ κ·ΈλŒ€λ‘œ λ°œμƒν•œλ‹€. κ·Έλž˜μ„œ λ¬Έμžμ—΄λ‘œ μ΄ˆκΈ°ν™”ν•΄μ£ΌλŠ” κ²ƒμ΄ μ•ˆμ „!

BigDecimal a = new BigDecimal(0.3);
BigDecimal b = new BigDecimal("0.3");	
System.out.println(a);	// output: 0.2999999999999...
System.out.println(b);	// output: 0.3

μ‹€μˆ˜ μ‚¬μš©μ„ 쀄이기

κΌ­ μ¨μ•Όν•˜λŠ” 상황이 μ•„λ‹ˆλΌλ©΄ μ‹€μˆ˜λ₯Ό μ•„μ˜ˆ μ•ˆμ“°λŠ” 것도 방법이닀. 예λ₯Ό λ“€μ–΄,

// Math.sqrt()의 리턴 값은 μ‹€μˆ˜
for (int i = 0; i < Math.sqrt(n); i++) {
    //...
}

// i * i < n ν˜•νƒœλ‘œ λ°”κΎΈλ©΄ μ‹€μˆ˜ μ‚¬μš©μ„ ν”Όν•  수 있음
for (int i = 0; i * i < n; i++) {
    //...
}

 

// Math.log()의 리턴 값은 μ‹€μˆ˜
cnt += Math.log(n) / Math.log(i);

// 일일이 카운트 ν•΄μ€ŒμœΌλ‘œμ¨ μ‹€μˆ˜ μ‚¬μš© ν”Όν•˜κΈ°
long pow = (long) i;
while (pow <= n) {
    cnt++;
    pow *= i;
}

 

λ¬Όλ‘  μ΄λ ‡κ²Œ ν•˜λ©΄ μ½”λ“œκ°€ μž₯ν™©ν•΄μ§€κ³ , μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν•  ν™•λ₯ λ„ λ†’μ•„μ§„λ‹€. κ·Έλž˜λ„ μ˜€λ²„ν”Œλ‘œμš°λŠ” λˆˆμ— 잘 보이기라도 ν•˜μ§€ λΆ€λ™μ†Œμˆ˜μ  μ˜€μ°¨λŠ” ν‹°λŒλ§Œ ν•΄μ„œ 찾아내기도 μ–΄λ ΅λ‹€. 

 

 

'Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] JSchλ₯Ό μ‚¬μš©ν•˜μ—¬ λ¦¬λˆ…μŠ€ λͺ…λ Ήμ–΄ 원격 μ „μ†‘ν•˜κΈ°  (0) 2024.07.17
[Java] BitSet  (0) 2024.04.19