IT

파이썬의 math.ceil () 및 math.floor () 연산이 정수 대신 부동 소수점을 반환하는 이유는 무엇입니까?

lottoking 2020. 6. 2. 21:13
반응형

파이썬의 math.ceil () 및 math.floor () 연산이 정수 대신 부동 소수점을 반환하는 이유는 무엇입니까?


누군가 이것을 설명 할 수 있습니까 ( 문서와 직선 -강조 광산).

math.ceil (x) x의 상한값 을 x 보다 크거나 같은 가장 작은 정수 값인 float로 반환합니다 .

math.floor (x) x 의 플로어를 x 보다 작거나 같은 가장 큰 정수 값인 float로 반환합니다 .

왜 것 .ceil그리고 .floor그들은 정의에 의해 계산 정수로 가정된다 반환 수레 때?


편집하다:

그럼이 그들이 이유에 아주 좋은 인수를 가지고 있어야 수레를 반환 할 때, 그리고 난 그냥, 생각에 익숙해되었다 @jcollado은 그들이 실제로 지적 파이썬 3에서 반환하는 int를 ...


부동 소수점 숫자의 범위는 일반적으로 정수 범위를 초과합니다. 부동 소수점 값을 반환함으로써 함수는 표현 가능한 정수 범위를 벗어난 입력 값에 대한 합리적인 값을 반환 할 수 있습니다.

고려 : floor()정수를 반환하면 무엇을 floor(1.0e30)반환 해야 합니까?

이제 파이썬의 정수는 이제 임의의 정밀도이지만 항상 그런 것은 아닙니다. 표준 라이브러리 함수는 동등한 C 라이브러리 함수를 둘러싼 얇은 래퍼입니다.


다른 답변에서 지적했듯이 파이썬에서는 오버플로 문제를 방지하는 역사적인 이유로 인해 부동 소수점을 반환합니다. 그러나 파이썬 3에서는 정수를 반환합니다.

>>> import math
>>> type(math.floor(3.1))
<class 'int'>
>>> type(math.ceil(3.1))
<class 'int'>

PEP 3141 에서 자세한 정보를 찾을 수 있습니다 .


파이썬의 수학 라이브러리는 float를 반환하는 C 수학 라이브러리 주위의 얇은 래퍼이기 때문에.


귀하의 의견에 혼란의 근원이 분명합니다.

ceil / floor 연산의 요점은 float를 정수로 변환하는 것입니다!

천장 및 바닥 작업의 요점은 부동 소수점 데이터를 정수 값 으로 반올림하는 것 입니다. 형식 변환을하지 마십시오. 정수을 가져야하는 사용자 는 작업 후에 명시 적 변환을 수행 할 수 있습니다.

사용 가능한 모든 것이 정수를 리턴하는 ceil 또는 float 연산이면 사소한 정수로 반올림 값을 구현할 수 없습니다. 먼저 입력이 표현 가능한 정수 범위 내에 있는지 확인한 다음 함수를 호출해야합니다. 별도의 코드 경로에서 NaN 및 무한대를 처리해야합니다.

또한 IEEE 754 를 준수하려면 부동 소수점 숫자를 반환하는 ceil 및 floor 버전이 있어야합니다 .


Python 2.4 이전에는 정수가 잘린 실수의 전체 범위를 보유 할 수 없었습니다.

http://docs.python.org/whatsnew/2.4.html#pep-237-unifying-long-integers-and-integers


float의 범위가 정수의 범위보다 크기 때문에 정수를 반환하면 오버플로가 발생할 수 있습니다


이것은 매우 흥미로운 질문입니다! 부동 소수점은 지수 (= bits_for_exponent) 를 저장하기 위해 약간의 비트가 필요하므로 2**(float_size - bits_for_exponent)항상 정수 값 보다 큰 부동 소수점 숫자 입니다! 다른 극단에서 제외 지수와 플로트의 한 줄 것 1, 0또는 -1. 이 논의하게 정수 범위플로트 범위 이러한 기능은 단순히 숫자가 외부 정수 유형의 범위 때마다 원래의 수를 반환하기 때문에 논쟁을. 파이썬 함수는 함수의 래퍼 C이므로 실제로 C정수를 반환하고 프로그래머가 ceil / floor를 호출하기 전에 범위 / NaN/ Inf검사 를 수행 해야하는 함수 의 결함입니다 .

따라서 논리적 인 대답은 이러한 함수가 유용한 유일한 시간이며 정수 범위 내의 값을 반환하므로 부동 소수점을 반환한다는 사실은 실수 이며 이것을 실현하는 데 매우 영리합니다!


다른 언어도이 작업을 수행하기 때문에 일반적으로 허용되는 동작입니다. (다른 답변에서 볼 수 있듯이 좋은 이유로)

참고 URL : https://stackoverflow.com/questions/8582741/why-do-pythons-math-ceil-and-math-floor-operations-return-floats-instead-of

반응형