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。或者,除非您有真正令人信服的理由,否则最好坚持加倍。它们将更快,更便携等。