floating-point - RISC-V 浮点舍入结果 Spike Vs。RTL 模拟
问题描述
我正在运行一个带有 float 和 double 指令的程序,并且在比较我的 RTL 模拟和 Spike 时,我观察到这些指令的回写值不匹配。
例如:
fsqrt.d fa3, fa3
Instruction in hex: 0x5a06c6d3
指令的输入参数值为
0x41e2e80040000000 = 2537554432.0
sqrt(2537554432.0) = 50374.1444790876820703394273903...
根据 RISC-V 规范和解码指令,该指令的舍入模式为Round to Nearest,与 Max Magnitude (RMM) 相关。我从 Spike 和 RTL sim 获得以下回写值。
Spike = 0x40e898c49f929b92 (in hex) = 50374.144479087685 (in decimal)
RTL sim = 0x40e898c49f929b91 (in hex) = 50374.144479087680 (in decimal)
查看实际的十进制值,似乎 RTL 结果更接近实际值,因此给出了正确的结果,但 Spike 和 dromajo 给出的值相同,但略有不同。
我想确认哪个结果是正确的,以及这种不匹配是否可以被认为是浮点运算中的错误行为。
请让我知道任何有助于解决我疑问的信息。
解决方案
似乎 RTL 结果更接近实际值
不,斯派克更近了。由于双舍入和劣质 OP 的 RTL sim double
to text,您的观察结果是歪斜的。使用更好的库和更多的小数精度来查看。
Spike (OP) = 0x40e898c49f929b92 50374.144479087 685 (in decimal)
Spike = 0x1.898c49f929b92p+15 50374.144479087 684886 +0028
sqrt(2537554432.0) 50374.144479087 6820703394273903...
RTL sim = 0x1.898c49f929b91p+15 50374.144479087 677610 -0044
RTL sim (OP) = 0x40e898c49f929b91 50374.144479087 680 (in decimal)
我怀疑RTL sim
with中的错误50374.144479087680
可能是由于它的库double
文本代码在Round to Nearest 中运行不正确,与 Max Magnitude (RMM) 相关。
推荐阅读
- c# - Blazor - 尝试用新行格式化文本区域
- javascript - 关于填充 p5.js 中褪色的问题
- web-crawler - 爬虫机器人用户代理格式
- python - Apache Beam - 调试垃圾收集以避免 OOM 问题
- c++ - 从父级的 wndproc 访问特定子窗口的最佳实践
- cors - 网站未发送“Allow-Access-Control-Origin”标头,但浏览器仍显示页面
- python - Python Selenium find_element_by_name 跳到第二个元素
- scala - 在 docker 容器内运行的 Akka Actor (Scala) 应用程序重新启动,日志中没有显示任何错误
- wampserver - 稍后将在我创建的 Wampserver 清理数据库文件中加载 phpmyadmin
- powershell - ConvertFrom-String 缺少属性