软件实现256位浮点数运算(使用IEEE 754格式存储)
引入 SoftFloat32.cpp 和 SoftFloat32.h 文件即可按常规浮点数据的方式使用
编译器至少支持32位整数运算,仅数据转换部分需要64位与32位整数的转换操作
整数应为小字节序,对于大字节序系统没有测试,已知问题:乘法运算需要进行调整
实测性能与GMP相差约20-30倍,对于性能不苛刻的情况可使用此库
代码可能存在问题,建议进行详细测试后再实际应用
示例代码:
#include <iostream>
#include "SoftFloat32.h"
int main()
{
int i;
CSoftFloat256 v , k;
char strBuf[256];
// pi^2n = ((-1^(n-1) * (2n)!) / (2^(2n-1) * B2n)) * Σ(1/k^2n)[k:1-N]
v = 1;
for( i = 2 ; i <= 16 ; i++ ) // 1/16^64 : 2^-256
{
k = i;
k.PowInt(-64);
v += k;
}
k = 1;
for( i = 2 ; i <= 64 ; i++ )
{
k *= i;
} // k = 64!
k.ScalBN(-63); // k *= 1/2^(64-1)
k *= 510; // B64 = -106783830147866529886385444979142647942017/510
k /= "106783830147866529886385444979142647942017";
v *= k; // v : pi^64
for( i = 0 ; i < 6 ; i++ )
{
v.Sqrt();
}
strBuf[v.ToStr(strBuf, sizeof(strBuf) - 1)] = 0;
std::cout << "pi : " << strBuf << std::endl;
// pi : 0.314159265358979323846264338327950288419716939937510582097494459230781640e1
std::cin.get();
return 0;
}