tennma   4년 전

벡터 둘을 받아서 FFT로 합성곱 구하는 코드를 짰는데, 예제는 맞게 출력하고 채점에서는 '틀렸습니다' 가 떠요.

XOR의 항등원이 0이니까 합성곱을 담을 벡터의 크기가 합성곱보다 큰건 문제가 안 될 것 같고, (뒤에 남는 0을 XOR해도 값이 같으니까)

제일 작은 입력이 1차항이니까 거기서 반례가 나올거같지도 않은데 뭘 놓쳤는지 짚이는게 없네요.

FFT 코드는 요기서 가져왔어요

https://m.blog.naver.com/PostView.nhn?blogId=kks227&logNo=221633584963&proxyReferer=https%3A%2F%2Fwww.google.com%2F

harinboy   4년 전

이걸 놓치신 것 같습니다.

1 1

1000000 1000000
1000000 1000000

sait2000   4년 전

일단 위에 분이 말씀하신 대로 h(x)의 계수 크기가 상당히 커집니다. 꽤 커집니다. 최대값을 한번 계산해보세요.

그리고 그 최대값을 계산해보면 double형이 정확히 표현할 수 없는 크기란 것을 알 수 있습니다!! (double형의 정확도는 보통(?)의 경우 2진법으로 53자리 10진법으로 17자리쯤입니다)

그래서 이 문제는 그냥 곱하면 안되고 1) 실수 오차를 정말 잘 처리하는 방법을 쓰거나 2) 아예 정수를 사용하는 FFT의 변형을 사용하거나 해야합니다.

tennma   4년 전

최대값을 확인안했었네요 감사합니다

댓글을 작성하려면 로그인해야 합니다.