실수 a와 정수 b가 주어질 때
값을 정확하게 계산하는 문제이다
이 문제가 나온 이유는, 실수의 제곱이라는 것이 CS적으로 보았을 때 절대로 정확하게 나올 수가 없다.
아무래도 컴퓨터는 2진법을 활용하다보니, 소수점을 나타내는데에 있어 Sign bit, exponent bit, bias bit 3개를 활용하여 소수점을 나타내게 되고, 이것을 통해 곱연산을 할 경우 손실이 발생할 수 밖에 없는 것이다.
따라서 바로 a**b를 수행하면 절대로 원하는 결과를 얻을 수 없다.
자연수(정수)에서는 이런 문제가 존재하지 않는다. 따라서, a를 정수로 나타낸 이후 연산을 수행하고, a의 소수 위치를 고려하여 연산 결과값에 '.'을 적절한 위치에 붙여주는 식으로 코드를 짜야 한다
a,b=list(input().split())
p = len(a[a.index('.')+1:]) # a의 소수점 위치. a = A * 10^p(A : 자연수)
a = a.replace('.','') # a의 소수점을 지워 A로 만듦
result = str(int(a)**int(b)) # A^b 연산 수행
p=str((10**p)**int(b)) # (10^p)^b 연산 수행
index = len(result)-len(p)+1
# index : 소수점을 붙여야 할 위치
if index >=0:
print(result[:index]+'.'+result[index:])
else:
print('0.'+'0'*(-index)+result)
컴파일 에러
(1) Python 코드인데 JAVA로 실행함
(2) print()에서 소괄호를 빼버림
런타임 에러
위처럼 로 만들지 않고 바로 연산을 수행하여 에러가 발생