2017-02-19 6 views
-1

유클리드 방법을 통해 두 숫자의 GCD를 계산하려고하고 이상한 행동을 발견했습니다. 숫자 값을 함수에 전달할지라도 숫자는 비트 수가 적은 숫자 (일반적으로 64 미만)의 함수에 의해 수정됩니다. 이 사람이 실수를 저의 것으로 생각하거나 예상되는 행동을하는 사람은 누구입니까? 여기 놀이터에서 코드를 확인할 수 있습니다 : Golang playground exampleGolang 이상한 big.Int 소수 비트에 대한 동작

예상되는 동작은 내 기능에 전달하여 값을 변경해야한다고 생각했습니다. 어떤 도움을 주셔서 감사합니다. 나는 검색의 마지막 날에 이와 같은 다른 사건을 발견 할 수 없었습니다.

답변

2

big.Int는 실제로 big.Int를 복사하는 동안, 그 안에 슬라이스가 얕은 복사가 효과적으로

(조각에 대한 기본 스토리지가 동일합니다), 그래서 type nat []Word 으로 정의된다 nat를 포함하는 구조체이다

더 큰 비트 폭이 문제를 나타내지 않는 이유는 확실하지 않습니다.

어쩌면 어딘가에서 재 할당이 필요하며 원본을 그대로 둔 채 새로운 []Word을 생성합니다. 다음 stdlib는 일반적으로 * big.Int을 반환 왜 값이

여기 버전 on play 제대로 복사 big.Int 값입니다 정말 복사 가능한 아니기 때문에

이것은 아마도입니다. 키 차분 것 :

a := new(big.Int).Set(x) 
b := new(big.Int).Set(y) 

(일반 및 사용 포인터 값이 유용하지 않은 것처럼)