Int를 Int로 나누고 Int 반환


79

두 개의 Ints ( ab) 를 얻고 A/B로 반환 하는 함수가 필요합니다 Int. 나는 그것이 A/B항상 정수 가 될 것이라고 확신합니다 .

내 해결책은 다음과 같습니다.

myDiv :: Int -> Int -> Int
myDiv a b = 
      let x = fromIntegral a
          y = fromIntegral b
      in truncate (x / y)

그러나 더 간단한 해결책을 찾고 싶습니다. 이 같은:

myDiv :: Int -> Int -> Int
myDiv a b = a / b

Int를 Int로 나누고 Int를 얻으려면 어떻게해야합니까?

답변:


140

왜 그냥 사용하지 quot않습니까?

quot a b

0을 향해 잘린 정수 a와 b의 정수 몫입니다.


7
또는 a `quot` b중위 애호가를 위해 (와우, 실제로 백틱을 피할 수 있습니다 백 슬래시로 백틱을 유도합니까?).

38
또한 a `div` b; 내가 올바르게 기억하면 quot(데마가 원한 것처럼) 잘리고 div0으로 반올림됩니다. 그래서 (-3) `quot` 4 == 0,하고 (-3) `div` 4 == -1.
Antal Spector-Zabusky 2010

5
에 대한 +1 div. 수학적으로 더 잘 행동하는 quot것은 주변에 음수가있을 때 나쁜 짓입니다.
luqui

이것은 저에게 생명의 은인이었습니다. 나는 fromIntegral (ceiling (int1 / int2))다른 것들과 씨름하고 있었는데 어느 것도 나에게를 돌려 Int주지 않았지만 이것은.
MuffinTheMan 2013

10
div0이 아닌 음의 무한대로 반올림합니다.
Lacuno

1

다음은 내가 직접 만든 작업입니다.

quot' a b
         | a<b = 0  -- base case
         | otherwise = 1 + quot' a-b b

2
운동으로는 좋지만 생산에는 쓸모가 없습니다. 큰 숫자에서는 느리고 (선형 시간) 높은 메모리 공간 (꼬리 재귀 아님)이 있습니다. 음수의 경우 잘못 a<0되었거나 ( ) 끝나지 않습니다 ( b<0).
Ruud Helderman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.