2 回答

TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊
強(qiáng)烈建議使用longdouble而不是float128,因為這很混亂,ATM。Python將在初始化期間將其強(qiáng)制轉(zhuǎn)換為float64。
在numpy內(nèi)部,它可以是雙精度型或長雙精度型。它在npy_common.h中定義,取決于您的平臺。我不知道您是否可以將其直接包含在源代碼中。
如果您在算法的這一部分中不需要性能,一種更安全的方法可能是將其導(dǎo)出為字符串,然后使用strold。

TA貢獻(xiàn)1712條經(jīng)驗 獲得超3個贊
numpy.longdouble指的是C編譯器調(diào)用的任何類型long double。當(dāng)前,這是numpy支持的唯一擴(kuò)展精度浮點(diǎn)類型。
在x86-32和x86-64上,這是一種80位浮點(diǎn)類型。在更特殊的系統(tǒng)上,可能還有別的東西(在Sparc上的IIRC是實際的128位IEEE浮點(diǎn)數(shù),在PPC上是double-double)。(這也可能取決于您所使用的操作系統(tǒng)和編譯器,例如Windows上的MSVC根本不支持任何擴(kuò)展精度。)
Numpy還將導(dǎo)出一些名稱,例如numpy.float96或numpy.float128。導(dǎo)出這些名稱中的哪一個取決于您的平臺/編譯器,但是無論您得到什么,總是引用與相同的基礎(chǔ)類型longdouble。而且,這些名稱極易引起誤解。它們不表示96位或128位IEEE浮點(diǎn)格式。相反,它們指示基礎(chǔ)類型使用的對齊位數(shù)long double。因此,例如在x86-32上long double為80位,但為了保持32位對齊而被填充多達(dá)96位,并且numpy將其稱為float96。在x86-64上,它long double仍然是相同的80位類型,但現(xiàn)在它被填充至128位以保持64位對齊,并且numpy將此稱為float128。沒有額外的精度,只有額外的填充。
建議:忽略float96/ float128名稱,只需使用即可numpy.longdouble?;蛘?,除非您有真正令人信服的理由,否則最好堅持加倍。它們將更快,更便攜等。
添加回答
舉報