簡體   English   中英

如何處理大於double最大值的浮點值

[英]How to handle float values that are greater than the maximum value of double

我的值大於1.97626258336499E-323

我也不能使用BigInteger,因為它只能處理整數值

任何幫助表示贊賞

以下是失敗的代碼,但由於某些用戶提供的某些解決方案而失敗:

BigValue / (Math.Pow((1 + ret), j));

此處BigValue類似於15000.25

ret是-0.99197104212554987

j將達到500-600。

我也不知道如何為此使用Rational Class

Microsoft基類庫團隊的BigRational 它使用大整數將其存儲為小數,但支持各種運算符。

在將其打印為小數時,我認為您需要為此編寫自己的實現。 我在這堂課的某個地方寫了一個書,但是我必須找到它。

這可能是有用的。 我用了一段時間沒有問題。 這是一個.Net BigDecimal類,您可以從codeplex下載(或僅查看源代碼):

http://bigdecimal.codeplex.com/releases/view/44790

它是用VB.Net(.Net 4.0)編寫的,但這無關緊要。

在C#中使用它的示例: http : //www.dreamincode.net/forums/blog/217/entry-2522-the-madman-scribblings/

您將不得不將語言切換為具有BigFloat類型的語言(例如,Haskel和Python具有本機軟件包),否則將找到具有C#綁定的第三方大型浮點庫。 對於GNU MP的這種綁定進行了一些討論,但是它逐漸消失了。 也許你會寫一個!

另請參閱此討論 ,其中討論了MS BigRational。 但是,這不同於BigFloat。

一種解決方案可能是在日志空間中解決您的問題。

您的示例將變為:

exp(log(Number) - log(1-0.9999999) * 400)

了解如何使用日志處理此類數字。 是的,您可以使用一個大的float包,但這幾乎總是過大。 通常,您可以使用日志獲得所需的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM