java - 从 float 转换为 BigDecimal 然后再转换回来是否危险?

标签 java floating-point bigdecimal ieee-754

我正在制作一个程序,该程序生成用于 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/

相关文章:

java - 四舍五入到最接近的千分之一

java - 创建 JSONObject 时 org.json 未报告的异常

javascript - 如何在显示主要内容之前抓取运行 Javascript 且带有 cookie 检查的网页

java - 如何在 jee 7 requests.xml 中指定 <ALL FILES>

c++ - 将十六进制转换为 double 转换为十六进制?

Java 十六进制浮点字面量歧义

java - 缺少要求 : Google Plugin for Eclipse 3. 7 2.6.1 需要 'org.eclipse.platform.feature.group [3.7.0,3.8.0)' 但找不到

javascript - 用于查找小数/ float 的正则表达式?

java - Jooq 将 String 转换为 BigDecimal

java - 无科学记数法的 BigDecimal 格式完全精确