6

在少數系統上double與long double相同。 如何在編譯時檢測long double是否具有擴展精度,並將其用於條件編譯。如何在編譯時檢測long double是否具有擴展精度

我看到有存在libgcc中預定義的宏SIZEOF_DOUBLESIZEOF_LONG_DOUBLE 但也有不是跨越不同的工具鏈移植。

有沒有C的方式來做到這一點?

+0

你可以試試'sizeof(double)> 8'。雖然不是便攜式的,但它在大多數情況下可能仍然有效。 – Mysticial 2012-01-05 22:58:22

+0

你不能測試'sizeof(double) 2012-01-05 22:58:36

+2

預處理器不識別sizeof。 – 2012-01-05 23:00:34

回答

5

您可以比較DBL_MANT_DIGLDBL_MANT_DIG來自float.h

1

您可以測試在float.h中

0

「正確」的解決這個問題(如由許多項目)定義

#if DBL_MANT_DIG < LDBL_MANT_DIG 

或相似的值是創建一個配置腳本。

配置腳本運行各種測試,包括編譯和運行小程序以確定編譯器和系統屬性。該腳本然後將它的發現作爲頭文件或makefile或兩者寫出來。當然,你可以做任何你喜歡的事情。

有一些工具可以半自動地完成這類事情,但它們可能會讓你過度使用。如果你想看看,名稱是autoconfautomake。要小心,它們學習起來並不簡單,但它們會生成配置腳本和makefile,只要它具有unix風格的外殼和GNU make,它們就可以在任何平臺上工作。