2013-04-12 2 views
2

이것은 분명히 작동하지 않습니다.두 개의 큰 정수에서 정확한 백분율 얻기

BigInteger Total = 1000000000000000000000000000000000000000000000000000022234235423534543; 
BigInteger Actual = 83450348250384508349058934085; 
string Percent = ((Decimal)100.0/Total*Actual).ToString()+"%"; 

질문은 정확한 백분율을 얻는 방법입니다. 현재 내가 사용

..
 string sTotal = (task.End - task.Start).ToString(); 
     BigInteger current = task.End; 

       string sCurrent = (task.End-current).ToString().PadLeft(sTotal.Length, '0'); 
       Int32 maxLength = sCurrent.Length; 
       if (maxLength > Int64.MaxValue.ToString().Length - 1) 
        maxLength = Int64.MaxValue.ToString().Length - 1; 

       UInt64 currentI = Convert.ToUInt64(sCurrent.Substring(0, maxLength)); 
       UInt64 totalI = Convert.ToUInt64(sTotal.Substring(0, maxLength)); 

       Percent = (Decimal)100.0/totalI 
        * currentI; 

당신은 더 나은 제안 할 수 있습니다?

+2

정확한 장소를 몇 개나 지정 하시겠습니까? –

+0

BigInteger 대신에 몇 가지 부동 소수점 유형을 사용할 수 있기를 바랍니다. 훨씬 더 좋은 것 – HopeNick

+0

@EricLippert 56 자리 이상의 – Chris

답변

4

당신은 이성이 아닌 정수를 계산하고, 그래서 당신은 해 찾기 재단 설치해야합니다 BigInteger를

http://msdn.microsoft.com/en-us/library/ff524509(v=VS.93).aspx

을와 Rational보다는 사용

http://msdn.microsoft.com/en-us/library/ff526610(v=vs.93).aspx

당신이 할 수있는 합리적인 값을 가장 가까운 double 값으로 사용하려면 ToDouble을 호출하십시오.

는 나는 56 소수점 이하 자릿수

OK 정확, 즉 정밀도 말도 안되는 양이 필요하지만, 나는 당신의 말에 당신을 데려 갈 것이다.

이중에는 소수점 이하 15 자릿수와 십진수 29 자만 있으므로 두 자리 또는 십진수를 사용할 수 없습니다. 당신은 부서를 만들기 위해 스스로 코드를 작성해야 할 것입니다.

첫째, 나눗셈을하고 에뮬레이트하는 알고리즘을 쓰기 :

은 여기 두 가지 방법입니다. 당신은 손으로 그것을 할 수 있습니다, 그래서 당신은 그것을 할 수있는 컴퓨터 프로그램을 작성할 수 있습니다. 필요한 정밀도의 비트가 생성 될 때까지 계속하십시오.

둘째 : WOLOG 문제의 합리적 긍정적이고 형태 xy 큰 정수 x/y입니다 있다고 가정합니다. b을 원하는 정밀도 인 p에 대해 1p으로 설정하십시오. 당신은 속성 큰 정수 a을 찾고자한다 :

a * y < b * x 

b * x < (a + 1) * y 

어느 a/b 또는 (a+1)/b이 페이지 숫자 x/y에 가장 가까운을 가진 소수가

.

의미가 있습니까?

음수가 아닌 BigInteger 집합에 대해 이진 검색을 수행하면 a 값을 찾을 수 있습니다.

이진 검색을 수행하려면 먼저 상한 및 하한을 찾아야합니다. 더 낮은 것은 쉽다; 가정에 따르면 분수는 x/y이 양수이기 때문에 0은 하한입니다. 상한선을 찾으려면 1/b, 10/b, 100/b ...그리고 x/y보다 큰 값을 찾을 때까지 계속됩니다. 이제 당신은 상한과 하한을 가지고, 당신은 불평등 진실하게 a의 정확한 값을 찾기 위해 결과 공간을 검색 이진 수 있습니다.

+0

비록 수학이 좋지는 않지만, 적어도 기존 솔루션을 향상시킵니다. 고마워요 – Chris

+1

@Chris : 천만에요. 나의 조언은 다음과 같다. 당신은 컴퓨터 프로그래밍을 대단히 도움이된다는 것을 알게 될 것입니다. 왜 그 불평등이 당신에게 당신이 원하는 부분을 줄지 이해합니까? –