我正在编写一个程序,该程序生成用于VHDL测试台的测试向量。测试平台实质上是测试一块充当单精度浮点加法器的硬件,因此向量将符合IEEE754标准。
无论如何,我目前的生成计划是将浮点值转换为BigDecimal,进行必要的算术运算,然后再转换回float。这很危险吗?精度是否会丢失,从而导致测试向量中可能出现不准确的结果?我想转换为BigDecimal,这样就可以避免舍入问题。
那么这会截断结果吗?
BigDecimal repA = new BigDecimal(Float.toString(A));
BigDecimal repB = new BigDecimal(Float.toString(B));
BigDecimal repResult = repA.add(repB);
float result = repResult.floatValue();其中A和B是一些浮点。
发布于 2012-04-01 02:57:30
如果您的目标是在浮点数的预期限制内拥有精确的32位浮点向量,那么我喜欢您的方法。首先将32位浮点数转换为精度更高的对象,执行几个数学步骤,然后再转换回32位浮点数。最后,如果您在32位浮点数中执行相同的一系列步骤,舍入误差可能会更低。
如果您的目标是准确地模拟使用32位浮点数执行本机计算的硬件的预期结果,那么您可能会冒着错误报告测试失败的风险,因为您的计算比被测试的硬件执行得更准确。
https://stackoverflow.com/questions/9958355
复制相似问题