저는 160 비트 숫자를 사용하는 C# 시스템을 BigInteger에 저장했습니다. 0-> 2^160 범위를 0-> 2Pi 범위로 매핑하는 것을 원으로 표시하려고합니다. 어떻게하면 좋을까요?BigInteger를 원에 매핑하기
마음에 즉시 점프 접근 방식은 분할 정수로 결과를 자릅니다 때문에 복잡성을 가지고 있다는 점
BigInteger number;
angle = (number/pow(2, 160)) * TwoPi;
입니다.
저는 160 비트 숫자를 사용하는 C# 시스템을 BigInteger에 저장했습니다. 0-> 2^160 범위를 0-> 2Pi 범위로 매핑하는 것을 원으로 표시하려고합니다. 어떻게하면 좋을까요?BigInteger를 원에 매핑하기
마음에 즉시 점프 접근 방식은 분할 정수로 결과를 자릅니다 때문에 복잡성을 가지고 있다는 점
BigInteger number;
angle = (number/pow(2, 160)) * TwoPi;
입니다.
다시 시작부터.
BigInteger는 0 -> 2^160이므로 double보다 작으므로 10^(- 308) ~ 10^(+ 308)까지 포함 할 수 있습니다.
explicit conversion from BigInteger to double이 있습니다.
그래서 당신은이 작업을 수행 : 난 당신이 정밀도를 잃게 될 것을 알고,하지만 그 원에 문제가되지해야BigInteger number;
var angle = ((double)number/Math.Pow(2, 160)) * TwoPi;
. 디스플레이 당신이해야 할 것됩니다 (라운드) 축구 필드의 크기입니다하지 않는 한
이정밀도 것을 받아 들일 수 :
Math.Pow()
이 double
을 반환하기 때문에 '복잡성'이 없습니다. 그래서 BigInteger가 (암시 적) converson을 두 배로 가진다면 당신은 잘 할 수 있습니다.
이 변환은 없으므로 BigInteger/double은 유효하지 않습니다. 코드 – Martin
Jeez이므로 명시적인 변환 만 있습니다. –
나는 그래서 여기에 어둠 속에서 자상이야, C# 또는 그 큰 정수의 아무것도 몰라 디스플레이의 너비는 단 1 분 (또는 10 또는 100 또는 10000000 또는 심지어 10^40이지만 숫자를 구별해야 함) 사이의 간격을 표시하는 데 필요한 것보다 훨씬 적습니다.
나는 큰 정수를 잘라 버리고 최상위 32 비트를 부호없는 정수로 처리 한 다음 2^32
으로 나누어 [0,1] 범위로 가져옵니다 (부동 소수점으로 변환). 나는 나눕니다.) 그리고 먼 저쪽으로 원을 그리십시오.
왼쪽의 32 비트를 얻으려면 큰 정수를 잘라내는 것이 2^128
으로 나누는 것과 같지만 비트 전송 방식이 더 좋을 수도 있고 간단히 비트를 직접 잡을 수도 있습니다.
마지막 32 비트를 사용하는 것이 좋습니다. C# BigInteger를 위해이 작업을 수행하는 방법에 대한 조언을 찾고있었습니다. – Martin
내가 아는 한 C#이나 .NET에는 BigIntegers가 없습니다. –
BigInteger는 .net 4에 도입되었습니다. http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx – Martin