[iOS 2주차] 문제 해결: Double과 % 연산자

DoyleHWorks·2024년 10월 28일
0

문제

Double의 나머지 연산에는 % 연산자를 사용할 수 없다. Calculator 클래스에 사칙연산을 추가한 후 나머지 연산을 추가하려고 했더니, 다음과 같은 오류가 떴다.

'%' is unavailable: For floating point numbers use truncatingRemainder instead

접근법

해당 문구를 검색해보니, Double 타입의 데이터를 나머지 연산할 때는 truncatingRemainder 메소드를 사용해야 한다고 한다. 문득 Int, Double, String 등 또한 사전에 정의된 Class 라는 것을 강의에서 들은 게 떠올랐다. 그럼 truncatingRemainder 메소드도 결국엔 Double이라는 Class 안에서 정의된 함수라는 것이다.

해결방법

아래와 같이 바꿔주었다.

// 원본 코드
        case "%" :
            var result = number1 % number2
            print("\(number1) % \(number2) = \(result)")
            return result
// 수정한 코드
        case "%" :
            var result = number1.truncatingRemainder(dividingBy: number2)
            print("\(number1) % \(number2) = \(result)")
            return result

느낀 점

이 문제를 접하고 바로 떠오른 생각은, 컴퓨터가 다루는 소수점은 본질적으로 부정확할 수 있다는 한계점이 있다는 것이다. 이렇게 별도의 메소드로 처리해야 된다는 것은 그에 대한 반증인 것 같다. 이는 이전에 데이터 타입 공부를 할 때도 맞이한 개념이다.

부동 소수점 숫자의 특성

컴퓨터가 10진수 숫자를 이진수로 변환할 때 정확한 변환이 불가능한 경우가 많다.

이를 극복하는 계산기가 있지 않을까? 겉으로만 소수점을 보여주면서 실제로 계산기 안에서는 Int로만 계산한다던가.. 물론 Int 자체에도 표현할 수 있는 숫자에 한계가 있으니 그만큼 계산할 수 있는 범위가 줄어들겠지만.. 어떻게 쪼물딱하면 만들어질 것 같은데 그렇게 할 정도로 메리트가 있는지 잘 모르겠다. 어쨌거나 결국엔 이진수 컴퓨터이고, 그 컴퓨터의 본질을 어색한 틀에 끼워맞추는 느낌이라서.. 이러한 문제점에 대해서 분명 수많은 사람들이 고민했을테니 리서치하면 이것저것 나올 것 같긴 하다. 하지만 오늘은 여기까지..


오늘의 Pull Request

어쩌면 멀지 않은 미래에 영어권 팀원들과 작업할 수도 있으니, 영어로 쓰는 걸 연습해보고 있다. ..쉽지 않다. 쉽지 않으니 계속 노력해보자!

profile
Reciprocity lies in knowing enough

0개의 댓글