시스템이 BigInteger.todouble 방법을 찾을 수없는 이유는 무엇입니까?
-
19-09-2019 - |
문제
F# Interactive를 사용하고 있으며 fsharp.powerpack.dll의 참조를 추가했습니다.
Bignum을 다음 코드로 두 배로 변환하려고 할 때
let n = 2N
let d = double n
오류가 나옵니다
"System.MissingMethodexception : 'Double System.Numerics.biginteger.todouble (System.Numerics.biginteger)'.
"Bignum to Int"및 "Bignum to Double"과 같은 변환을 원한다면 어떻게해야합니까? 매우 감사합니다.
해결책
당신이 쓴 내용은 F# 독립형 CTP에서 작동합니다.
이 오류는 Biginteger 유형이 F# 라이브러리에서 .NET4.0 코어 라이브러리로 이동 되었기 때문에 VS2010에서 발생합니다. 이 문제에 F# CTP와 VS2010 베타가 설치된 것과 관련이 있는지 확실하지 않습니다.
더 나은 솔루션이 올 때까지 다음과 같이 자신의 변환을 굴릴 수 있습니다.
let numToDouble (n:bignum) = double n.Numerator / double n.Denominator
Bignum을 정수로 변환하려면 다음과 같은 것을 생각할 수 있습니다.
let numToInt (n:bignum) = int n.Numerator / int n.Denominator
그러나 이것은 다소 위험합니다 : 아주 쉽게 넘쳐납니다. 더 나은 버전의 numtoint는 먼저 더블로 변환 한 다음 int로 변환하는 것입니다.
let numToInt = int << numToDouble
그럼에도 불구하고 두 전환은 308 자리 이상의 분자/분모에 이상적이지 않으며, 이는 여전히 두 배가 넘쳐나는 반면, 분수 자체는 작을 수 있습니다.
예 : 11^300 / 13^280 ~ = 3.26337이지만
> numToDouble (pown 11N 300 / pown 13N 280);;
val it : float = nan