2012-06-27 4 views
3

내가 이해하는 바로는, 정수 나누기를 수행하는 현재의 방법은 하드웨어에서 역수를 계산 한 다음 곱셈을 수행하는 것입니다.역수를 계산하고 저장함으로써 빠른 정수 나누기?

정수 나누기에 많은 시간을 소비하는 C# 코드가 있습니다. 값이 거의 변경되지 않아 값이 캐시 될 수 있습니다.

소프트웨어에서 하드웨어 알고리즘을 수행하고 싶습니다. 즉 제수의 역수를 계산하고 이러한 모든 나누기를 곱셈으로 바꾸고 싶습니다. 누구든지이 변환을 수행하는 알고리즘을 알고 있거나 더 나은가? 자동으로이를 수행 할 수있는 CLR이 있습니까?

+0

더 낮은 수준의 언어 (예 : C)로 이것을 쓰지 않고 그 대신에 상호 작용할 수 있습니까? – Oded

+0

CPU가 실제로 정수 나누기의 부동 소수점 연산을 수행한다고 말하고 있습니까? (예 : x/4 = x * 0.25). 그렇다면 정수 연산은 일반적으로 부동 소수점 연산보다 훨씬 빠르다고 가정 할 수 있습니까? – stakx

+0

@stakx 하드웨어의 정수 나누기는 부동 소수점 나누기보다 복잡합니다. 그러나 구체적인 구현 방법을 말할 수는 없습니다. – NominSim

답변

4

우수한 blog post series on the topic of integer division by multiplication가 있습니다. 실제로 변환을 구현하는 데 필요한 모든 요소가 포함되어 있습니다.

+5

링크 전용 답변은 일반적으로 SO에 싫증납니다. 당신은 대답의 절차의 요지를 줄 수 있습니까? –

+2

이 답변은 질문에 대답하기 위해 모든 것이 있다고 말합니다. 링크 된 게시물의 품질이 우수합니다. 나는 단지 첫 번째 구글 히트를 복사하지 않았다. 나는 그것을 기억하고 나서 브라우저 기록에서 가져 갔다. ** 내 게시물을 자유롭게 편집 할 수 있습니다. ** – usr

+3

링크 만있는 답변에 문제가 있으면 사이트를 제어 할 수 없다는 것입니다. 그것이 미래에 무너지면,이 대답은 그것을 읽는 누구에게나 쓸모가 없습니다. –