본문 바로가기

코딩 공부/Unity C#

데이터 타입에 따른 계산의 변화

온도 변환

이 연습에서는 화씨에서 섭씨로, 다시 화씨에서 섭씨로 온도를 변환합니다.

화씨에서 섭씨로 변환하려면 다음과 같이 하세요:

  1. 화씨 온도에서 32를 빼는 것으로 시작합니다.
  2. 답을 9로 나눕니다.
  3. 마지막으로 5를 곱하면 섭씨 온도가 나옵니다.
 C = ((F - 32) / 9) * 5

 

섭씨를 화씨로 변환하려면 다음과 같이 하세요:

  1. 먼저 섭씨 온도에 9를 곱합니다.
  2. 답을 5로 나눕니다.
  3. 마지막으로 32를 더하면 화씨 온도가 나옵니다.
F = (C * 9) / 5 + 32

 

문제 1 - Int를 사용한 온도 계산

Exercise7이라는 이름의 새 2D Unity 프로젝트를 생성합니다. SampleScene의 이름을 Scene0으로 바꿉니다. Scripts 폴더를 추가하고 ConvertTemperatures라는 이름의 새 C# 스크립트를 추가합니다.

스크립트를 열고 스크립트 상단에 있는 코멘트를 입력한 다음 Update 메서드를 삭제합니다. Start 메서드에 다음 코드를 추가합니다:

  1. 화씨로 표시되는 원래 온도, 섭씨로 표시되는 계산된 온도, 화씨로 표시되는 계산된 온도(섭씨에서 다시 화씨로 변환할 때)를 저장하기 위해 int 변수를 세 개 선언합니다.
  2. 화씨 단위의 원래 온도를 0으로 지정하고 해당 화씨 값을 인쇄하고, 섭씨로 변환하여 섭씨 값을 인쇄한 다음 섭씨 값을 다시 화씨로 변환하여 화씨 값을 인쇄합니다. 숫자만 인쇄하지 말고 각 출력에 레이블을 지정하세요

  1. 원래 온도를 화씨로 32를 지정하고 화씨 값을 인쇄한 다음 섭씨로 변환하여 섭씨 값을 인쇄한 다음 섭씨 값을 다시 화씨로 변환하여 화씨 값을 인쇄합니다. 숫자만 인쇄하지 말고 각 출력에 레이블을 지정하세요.

  1. 래 온도를 화씨로 212를 지정하고 화씨 값을 인쇄한 다음 섭씨로 변환하여 섭씨 값을 인쇄한 다음 섭씨 값을 다시 화씨로 변환하여 화씨 값을 인쇄합니다. 숫자만 출력하지 말고 각 출력에 레이블을 지정하세요.

씬의 메인 카메라에 스크립트를 첨부하고 게임을 실행하면 콘솔 창에서 출력을 확인할 수 있습니다.

0에서 섭씨로 변환했다가 다시 화씨로 변환하면 최종 화씨 온도가 0이 아니라 5가 되는 것을 확인할 수 있습니다. 이것이 이 연습의 요점 중 하나입니다! 사용한 데이터 유형과 해당 데이터 유형이 주어졌을 때 왜 이런 결과가 나올 수 있는지 생각해 보세요.

 

문제 2 - 플로트를 사용한 온도 계산

이미 추가한 코드 뒤에 Start 메서드에 다음 코드를 추가합니다:

  1. 화씨로 표시되는 원래 온도, 섭씨로 표시되는 계산된 온도, 화씨로 표시되는 계산된 온도(섭씨에서 다시 화씨로 변환할 때)를 저장하는 float 변수를 세 개 선언합니다.
  2. 화씨 단위의 원래 온도를 0으로 지정하고 해당 화씨 값을 인쇄하고, 섭씨로 변환하여 섭씨 값을 인쇄한 다음 섭씨 값을 다시 화씨로 변환하여 화씨 값을 인쇄합니다. 숫자만 출력하지 말고 각 출력에 레이블을 지정하세요.

이제 0에서 섭씨로, 다시 화씨로 변환하면 0에 가까워지지만 여전히 정확히 0은 아닙니다. 부동 소수점 숫자는 연속 영역에서 실수의 근사치이지만 정수에 비해 정밀도가 더 높다는 점을 기억하세요. int 변수 대신 float 변수를 사용했을 때 최종 화씨 온도가 더 가까워진 이유가 바로 여기에 있습니다.

문제 3 - 더블을 사용한 온도 계산

이미 추가한 코드 뒤에 Start 메서드에 다음 코드를 추가합니다:

  1. 화씨로 표시된 원래 온도, 섭씨로 표시된 계산된 온도, 화씨로 표시된 계산된 온도(섭씨에서 화씨로 다시 변환할 때)를 저장하기 위해 double 변수를 세 개 선언합니다.
  2. 화씨 단위의 원래 온도를 0으로 지정하고 해당 화씨 값을 인쇄하고, 섭씨로 변환하여 섭씨 값을 인쇄한 다음 섭씨 값을 다시 화씨로 변환하여 화씨 값을 인쇄합니다. 숫자만 출력하는 것이 아니라 각 출력에 레이블을 지정해야 합니다.

마지막으로 0을 섭씨에서 화씨로, 다시 화씨로 변환하면 원래 예상한 대로 0이 출력됩니다. double 데이터 유형은 float 데이터 유형보다 더 많은 바이트를 사용하기 때문에 floats를 사용할 때 발생했던 반올림 오류가 발생하지 않습니다.

이 연습은 특히 여러 계산을 수행할 때 데이터 유형이 실제로 얼마나 중요한지 보여줍니다.

 

데이터 타입별 비트수가 다르고, int < float < double 로 갈수록 더 정밀한 계산이 가능하다.