我正在开发一个可在 Linux、UNIX 和 Windows 上运行的操作系统可移植软件,并且该软件必须进行单元测试。
想象一下这个单元测试,它断言将 IEEE 单精度浮点值 1.26743237e+015f 转换为字符串:
void DataTypeConvertion_Test::TestToFloatWide()
{
CDataTypeConversion<wchar_t> dataTypeConvertion;
float val = 1.26743237e+015f;
wchar_t *valStr = (wchar_t*)dataTypeConvertion.ToFloat(val);
std::wcout << valStr << std::endl;
int result = wcscmp(L"1.26743E+015", valStr);
CPPUNIT_ASSERT_EQUAL(0, result);
delete [] valStr;
}
我的问题是:只要浮点数符合IEEE标准,所有操作系统和处理器都会将浮点数转换为字符串"1.26743E+015"吗?我问这个问题是因为我知道数学处理器可能不会返回准确的结果,我想知道在不同的处理器上是否会产生不同的结果,因为它们可能具有处理器体系结构内部的不同硬件实现IEEE浮点运算。
std::numeric_limits::epsilon<float>()
获取当前平台支持的实际float
精度。它可能因不同的机器架构/FPU而异。 - πάντα ῥεῖ