Korean subtitles

← 07-16 Arithmetic Operations 2

Get Embed Code
6 Languages

Showing Revision 2 created 10/14/2014 by Won Ho.

  1. 기본적으로 제가 테스터를 컴파일 하고 실행하면
  2. 모든 메소드들은 0을 리턴 하고 있습니다.
  3. amadahlSpeedup을 먼저 고쳐봅시다. 지금은 0을 리턴 하고 있습니다.
  4. 만약 위 식처럼 똑같이 작성한다면 어떻게
  5. 될까요? 테스터를 실행해보면
  6. 2.875라는 결과가 나옵니다. 저는 사실 1.6을
  7. 예상했습니다. 다시 돌아가서 고쳐 봅시다.
  8. 지금 나눗셈을 먼저 하는 걸로 보입니다.
  9. 1 나누기 s, s 나누기 n,
  10. 그리고 가운데 있는 더하기와 빼기를 합니다.
  11. 이렇게 보니 우리가 생각했던 것과 전혀 다르게
  12. 흘러가고 있었습니다. 여기 s부터 n은
  13. 같이 묶여 있어야 합니다. 그리고
  14. 1 - s도 분자에 묶여 있어야 합니다.
  15. 다시 한 번 실행해보니
  16. 잘 됩니다. 그러나
  17. crossRatio도 해야 합니다. 방금 한 과정과
  18. 똑같이 해보겠습니다. 이 식을 똑같이 썼지만
  19. 한 줄로 표현했습니다.
  20. 그래서 이 값을 리턴하고 컴파일을 하면
  21. 오류가 납니다. '예상되지 않는 데이터 형, 값을 갖고 있는
  22. 클래스가 필요하다.' 라고 뜹니다. 이 오류를 보면 말이 되는 것 같지는
  23. 않지만, 약간의 힌트를
  24. 제공합니다. 이와 같이 연속된 괄호는
  25. 또 다른 뜻이 있습니다.
  26. 특히, 괄호 안에 a - c 의 데이터형식을 자세히 보면
  27. 제가 여기에 나타내야 할 부분은 바로
  28. 곱하기 입니다. 여기에도 곱하기를 해야
  29. 합니다. 제가 테스터를 또 실행하면
  30. 당연하게도 알맞은 정답이 나오지 않습니다.
  31. 왜냐하면, 같은 관례를 따르는 연산자들이
  32. 많기 때문입니다. 계산은 왼쪽으로부터 시작해서
  33. 오른쪽으로 가고, 우리가 의도하던 a - c 곱하기
  34. b - d 나누기 b - c 곱하기 a - d가 되질 않습니다.
  35. 이렇게 표현하면 a -c 곱하기 b - d 나누기 b - c를 하고
  36. 저 전체의 값을 a - d에 곱할 것입니다.
  37. 이제 해야 할 부분은
  38. 분모를 묶어야 합니다. 분자를 묶어도 되지만
  39. 다르게 해야 헷갈리지 않습니다.
  40. 컴파일을 다시 하고 테스터를 실행하면,
  41. 두 개의 메소드가 제대로 동작하고 있습니다. 이제 average를
  42. 구하러 갑시다. 저는 4개의 매개변수를 더하고 4로 나누겠습니다.
  43. 결과가 어떻게 나오는지 봅시다. 한 경우는 제대로 되고
  44. 다른 경우에는 제대로 되질 않습니다.
  45. 테스터 안을 들여다보겠습니다.
  46. 3, 4, 3 그리고 3의
  47. 평균을 계산 하면 작동이 되질 않습니다.
  48. 사실 결과는 3.25가 나와야 하지만
  49. 소수점이 결과에서 빠졌습니다. 자바는 이를
  50. 정수형 나눗셈으로 인식하고 있습니다. 왜냐하면
  51. 4가 정수이기 때문이고 나머지 매개변수들도 정수형이기 때문입니다.
  52. 이걸 고칠 방법이 몇 가지 있습니다. 4를 4.0으로 쓴다면
  53. 제대로 된 답이 나옵니다. 아니면 이 모든 int를 double로
  54. 바꿀 수 있습니다. 이렇게 한다면 저는 4도
  55. double형으로 바꿔야 합니다.
  56. 이걸 컴파일하고 테스터를 실행하면 잘 작동 됩니다.
  57. 이번 경우에는 모든 변수들이 double형이어서
  58. 결과가 double형으로 나올 수밖에 없고
  59. double을 int로 나누면 자동으로
  60. 형 변환을 해서 결과가 나옵니다.
  61. 해보면 굉장히 쉽습니다.
  62. 우리에겐 이 식이 맞아 보이지만, 컴퓨터가
  63. 읽을 때는 틀리고 컴파일러가 아무소리 안합니다. 우리가
  64. 처음에 했던 실수를 했을 때 결국엔
  65. 실행 시간 오류가 되어 버렸습니다.
  66. 이 예제는 여러분이 원하는 결과가 잘 나오는지
  67. 확인할 수 있게 하는 훈련이라고 생각합니다. 먼저 계산을
  68. 해보고 코드를 작성하세요. 퀴즈 푸느라 수고했습니다.