2010-01-09 5 views
1

F # Interactive를 사용하고 있으며 FSharp.PowerPack.dll에 대한 참조를 추가했습니다. 방법을 찾을 수 없습니다 : 시스템에서 BigInteger.ToDouble 메서드를 찾을 수없는 이유는 무엇입니까?

나는 다음과 같은 코드로 두 배의 bignum을 변환하려고

,

let n = 2N 
let d = double n 

오류가

"System.MissingMethodException가 나오는 '더블 System.Numerics.BigInteger.ToDouble을 (BigNum n) "

"BigNum to int "및"BigNum to double "과 같은 변환을하려면 어떻게해야합니까? "? 매우 감사합니다.

답변

2

작성한 내용은 F # 독립 실행 형 CTP에서 작동합니다.

BigInteger 형식이 F # 라이브러리에서 .Net4.0 코어 라이브러리로 이동 되었기 때문에이 오류가 VS2010에서 발생합니다. 이 문제가 F # CTP와 VS2010 베타 버전을 모두 설치했는지 여부는 확실하지 않습니다. 더 나은 솔루션이 따라 올 때까지

,이 같은 자신의 변환을 롤 수 :

let numToInt (n:bignum) = int n.Numerator/int n.Denominator :

let numToDouble (n:bignum) = double n.Numerator/double n.Denominator

당신은 다음과 같은 것을 생각할 수있는 정수로의 bignum을 변환하려면

그러나 이것은 매우 위험합니다. 아주 쉽게 오버 플로우됩니다. numToInt의 더 나은 버전은 이중 첫째로 변환 한 후 int로 변환하는 것입니다 :

let numToInt = int << numToDouble 여전히

이 모두 변환 이상 308 자리의 분자/분모 적합하지있는 오버 플로우 여전히 것 두 배가되지만 분수 자체는 작을 수 있습니다.

예 : 솔루션 11^13분의 300^~ = 3.26337 280 만

> numToDouble (pown 11N 300/pown 13N 280);; 
val it : float = nan 
+0

감사합니다. 나는 그것을 더 나은 것으로 사용할 때까지 사용하는 것이 좋다고 생각한다. –

관련 문제