我正在制作一个程序,该程序生成用于 VHDL 测试平台的测试 vector 。测试平台实质上是测试一 block 用作单精度浮点加法器的硬件,因此 vector 将符合 IEEE 754 标准。
无论如何,我目前的生成计划是将 float 值转换为 BigDecimal
,进行必要的算术运算,然后再转换回 float。这很危险吗?精度是否会丢失,从而导致测试 vector 中的结果可能不准确?我想转换为 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 是一些 float 。
最佳答案
如果您的目标是在 float 的预期限制内获得准确的 32 位浮点 vector ,那么我喜欢您的方法。您首先要将 32 位 float 转换为精度更高的对象,对数学执行几个步骤,然后再转换回 32 位 float 。最后,与在 32 位 float 中 native 执行相同系列步骤相比,舍入误差可能会更低。
如果您的目标是准确模拟使用 32 位 float native 执行计算的硬件的预期结果,那么您可能会冒着错误地报告测试失败的风险,因为您的计算执行的准确性高于正在测试的硬件。
关于java - 从 float 转换为 BigDecimal 然后再转换回来是否危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9958355/