![](/img/trans.png)
[英]How to format floating point numbers with decimal comma using the fmt library?
[英]Is there a library class to represent floating point numbers?
我正在編寫一個應用程序,它對十進制數字(例如 57.65)進行大量操作。 由於乘法和除法會迅速侵蝕它們的准確性,我想將數字存儲在 class 中,這樣可以在操作后保持其准確性,而不是依賴 float 和 double。
我說的是這樣的事情:
class FloatingPointNumber {
private:
long m_mantissa;
int m_dps; // decimal points
// so for example 57.65 would be represented as m_mantissa=5765, m_dps=2
public:
// Overloaded function for addition
FloatingPointNumber operator+(FloatingPointNumber n);
// Other operator overloads follow
}
雖然我可以編寫這樣的 class,但感覺有點像重新發明輪子,我確信一定有某個庫 class 可以執行此操作(盡管這在 STL 中似乎不存在)。
有人知道這樣的圖書館嗎? 非常感謝。
你的意思是這樣的嗎?
#include "ttmath/ttmath.h"
#include <iostream>
int main()
{
// bigdouble consists of 1024*4 bytes for the mantissa
// and 256*4 bytes for the exponent.
// This is because my machine is 32-bit!
typedef ttmath::Big<1024, 256> bigdouble; // <Mantissa, Exponent>
bigdouble x = 5.05544;
bigdouble y = "54145454.15484854120248541841854158417";
bigdouble z = x * y * 0.01;
std::cout << z;
return 0;
}
您可以根據需要指定尾數中的機器字數和指數 。 我使用TTMath來解決Project Euler難題,我對它非常滿意。 我認為這是相對穩定的,如果你有疑問,作者非常友好。
編輯::我過去也使用過MAPM 。 它表示基數為100的大浮點數,因此將十進制數轉換為基數為100將沒有問題,與基數2不同.TTMAT使用基數2來表示大浮點數。 自圖書館頁面聲稱,它自2000年以來一直保持穩定。 它已在許多應用程序中使用,您可以在庫頁面中看到它。 它是一個帶有漂亮的C ++包裝器的C庫。
MAPM nextPrime(){
static MAPM prime = 3;
MAPM retPrime = prime;
prime += 2;
while( isPrime( prime ) == false )
prime += 2;
return retPrime;
}
順便說一句,如果你有興趣在GMP和你正在使用VS,那么你可以檢查MPIR這是GMP端口的Windows;)對我來說,我覺得TTMath比賞心悅目,更容易/比所有的東西我想是因為該庫確實快了堆棧分配,無論如何都不會觸及堆。 基本上它不是一個任意的精度庫,你在編譯時指定精度,如上所示。
如果你想自己動手, Binary Coded Decimal可能是你最好的選擇。
一個十進制算術包列表 ,包括Robert Klarer的decNumber ++,它實現了即將發布的關於C ++中十進制算術類型的ISO技術報告中指定的接口:ISO / IEC TR 24733:C ++十進制浮點算術擴展
具有正確舍入庫的多精度浮點數 ,但如果我沒記錯的話,它是二進制浮點數
我沒有使用這些庫的經驗,但就意識而言,我認為在過去幾年中有兩個與這個問題相關的重大發展......
我知道 C# 中沒有“posits”的實現,也沒有發布 C# 11。 但同樣——這些是與該問題相關的顯着發展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.