문제

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top