Skip to content

jinxinB/SoftFloat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SoftFloat

软件实现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;
}

About

256bit soft float

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages