首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >numpy.float128的内部精度是多少?

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

Stack Overflow用户
提问于 2012-01-30 10:38:41
回答 3查看 32.5K关注 0票数 37

numpy.float128内部映射到什么精度?是__float128还是长双人间?或者完全是别的什么?

如果有人知道的话,一个潜在的问题是:在C中,将一个__float128转换成一个(16字节)长的双倍,在精度上只会有损失,这是安全的吗?(这是为了与在长双上运行的C库进行接口)。

编辑:作为对评论的回应,平台是'Linux-3.0.0-14-generic-x86_64-with-Ubuntu-11.10-oneiric'.现在,如果numpy.float128有不同的精度依赖于平台,那对我也是有用的知识!

要明确的是,这是我感兴趣的精确性,而不是元素的大小。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-30 12:45:24

我们非常推荐使用而不是float128,因为它是乱七八糟,ATM。Python将在初始化期间将其转换为float64

它可以是双倍,也可以是长双倍。它是在npy_common.h中定义的,取决于您的平台。我不知道你是否可以把它写进你的源代码中。

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

票数 14
EN

Stack Overflow用户

发布于 2013-06-10 12:33:05

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

在x86-32和x86-64上,这是一个80位浮点型。在更有异国情调的系统上,这可能是另一回事( Sparc上的IIRC是一个实际的128位IEEE浮点数,而PPC上则是双倍)。(这也可能取决于您使用的操作系统和编译器--例如,Windows上的MSVC根本不支持任何类型的扩展精度。)

Numpy还将导出一些名称,如numpy.float96numpy.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。或者最好还是坚持双倍,除非你有一个真正令人信服的理由。它们会更快,更便携,等等。

票数 56
EN

Stack Overflow用户

发布于 2021-07-26 19:11:39

来自矮胖的医生的TLDR

np.longdouble被填充到系统默认值;np.float96np.float128提供给想要特定填充的用户。尽管有这些名称,但np.float96np.float128只提供与np.longdouble相同的精度,即在大多数x86机器上提供80位,在标准Windows中提供64位。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9062562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档