ps하다 다소 놀란 지점

뿌엑·2022년 8월 28일
0
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer stk;
		int A;
		int B;
		int V;
		
		try {
			stk = new StringTokenizer(br.readLine(), " ");
			
			A = Integer.parseInt(stk.nextToken());
			B = Integer.parseInt(stk.nextToken());
			V = Integer.parseInt(stk.nextToken());
			
			System.out.println(solution(A, B, V));
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	static int solution(int A, int B, int V) {
		double d = A - B;
		
		if(V - A == 0) {
			return 1;
		}
		
		return (int)Math.ceil((V - A) / d) + 1;
	}
}

input으로 100 99 1000000000이란 값을 넣을 때 solution의 d 자료형이 float라면 부정확한 값이 출력된다. 양수에서 단지 float 자료형으로 된 1을 나누는 것 뿐인데도 다른 값을 가져오는 것이다.
그 원인은 당연히 부동 소수점이 실수의 근사값을 표현하는 것에서 나올텐데, 정수일지라도 해당 오류가 발생한다는 점은 새롭게 안 사실이다.

0개의 댓글