2014-09-02 2 views
0

나는 함께 곱셈을하는 부호없는 long long int (64 비트 정수)를 두 개 가지고 있습니다. 그러나 (이것이 의미가 있습니다) 내장 된 128 비트 데이터 유형이 없습니다 (그리고 나는 확실히 부유하지 않아서 128 비트 프로세서를 감당할 수 없습니다). 따라서 결과의 하위 64 비트 만 반환합니다. 나머지를 얻는 방법이 있습니까 (아마도 다른 레지스터에 저장되어있을 것입니까?)?64 비트 곱셈의 전체 128 비트 결과를 얻는 방법

나는 임베디드 어셈블리를 두려워하지 않는다. 이것은 중요 할 수 있기 때문에 : % rax 레지스터를 사용하려고 시도한 다른 번에 gcc는 그러한 레지스터가 없다고 불평했습니다. GAS는 내가 인식하지 못하는 다른 구문을 사용합니까?

+1

"중복"가정의 (a)하지 중복, (b)는, -5로 폐쇄 불분명 –

+2

여기에 복제본이 있습니다 : http://stackoverflow.com/questions/13187629/gcc-intrinsic-for-extended-division-multiplication –

+0

@Matt 확실히 속임수입니다 –

답변

-1

잠재적으로 무한한 수에 대한 계산을 허용하는 https://gmplib.org을 살펴보아야한다고 생각합니다.

아니면 몇 시간보다 더 걸릴 안 곱셈 알고리즘을 구현할 수 : 페이지 참조 @DavidHeffernan

+4

이것은 매우 약합니다. 상단에 GMP. 그리고 두 번째 단락은 전혀 유용하지 않습니다. 효과적으로 "코드를 작성하여 문제를 해결하십시오"라고 말합니다. –

+2

고정 된 정밀도 만 필요로하는 이유는 무엇입니까? –

관련 문제