为了账号安全,请及时绑定邮箱和手机立即绑定

numpy.float128的内部精度是多少?

numpy.float128的内部精度是多少?

慕森王 2019-10-12 10:37:59
numpy.float128内部映射到什么精度?是__float128还是长双倍?(或完全其他!!)如果有人知道,这个问题可能会引起关注:在C中将__float128转换为(16字节)长的双精度数,而只是精度下降,是否安全?(这是为了与在长双精度上运行的C lib接口)。编辑:作为回应,该平台是“ Linux-3.0.0-14-generic-x86_64-with-Ubuntu-11.10-oneiric”。现在,如果numpy.float128的精度取决于平台,则对我来说也是有用的知识!需要明确的是,这是我感兴趣的精度,而不是元素的大小。
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

强烈建议使用longdouble而不是float128,因为这很混乱,ATM。Python将在初始化期间将其强制转换为float64。


在numpy内部,它可以是双精度型或长双精度型。它在npy_common.h中定义,取决于您的平台。我不知道您是否可以将其直接包含在源代码中。


如果您在算法的这一部分中不需要性能,一种更安全的方法可能是将其导出为字符串,然后使用strold。


查看完整回答
反对 回复 2019-10-12
?
交互式爱情

TA贡献1712条经验 获得超3个赞

numpy.longdouble指的是C编译器调用的任何类型long double。当前,这是numpy支持的唯一扩展精度浮点类型。


在x86-32和x86-64上,这是一种80位浮点类型。在更特殊的系统上,可能还有别的东西(在Sparc上的IIRC是实际的128位IEEE浮点数,在PPC上是double-double)。(这也可能取决于您所使用的操作系统和编译器,例如Windows上的MSVC根本不支持任何扩展精度。)


Numpy还将导出一些名称,例如numpy.float96或numpy.float128。导出这些名称中的哪一个取决于您的平台/编译器,但是无论您得到什么,总是引用与相同的基础类型longdouble。而且,这些名称极易引起误解。它们不表示96位或128位IEEE浮点格式。相反,它们指示基础类型使用的对齐位数long double。因此,例如在x86-32上long double为80位,但为了保持32位对齐而被填充多达96位,并且numpy将其称为float96。在x86-64上,它long double仍然是相同的80位类型,但现在它被填充至128位以保持64位对齐,并且numpy将此称为float128。没有额外的精度,只有额外的填充。


建议:忽略float96/ float128名称,只需使用即可numpy.longdouble。或者,除非您有真正令人信服的理由,否则最好坚持加倍。它们将更快,更便携等。


查看完整回答
反对 回复 2019-10-12
  • 2 回答
  • 0 关注
  • 1546 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信