我有幾個關於浮點和iOS設備的問題:
在給定的iOS設備上,浮點是確定性的嗎?
在所有iOS設備中浮點是確定性的嗎?跨iOS設備的浮點確定性是否確定?
如果沒有,是否有辦法讓它們成爲確定性的?我在想的是:改變編譯器設置,減少數學運算集的使用等。
如果沒有辦法這麼做,那麼最好的選擇是什麼?
我可以使用固定點嗎?這是否意味着使用NSDecimalNumber?
乾杯。
我有幾個關於浮點和iOS設備的問題:
在給定的iOS設備上,浮點是確定性的嗎?
在所有iOS設備中浮點是確定性的嗎?跨iOS設備的浮點確定性是否確定?
如果沒有,是否有辦法讓它們成爲確定性的?我在想的是:改變編譯器設置,減少數學運算集的使用等。
如果沒有辦法這麼做,那麼最好的選擇是什麼?
我可以使用固定點嗎?這是否意味着使用NSDecimalNumber?
乾杯。
來自相同數據大小的結果應該是相同的。 IEEE浮點標準規定了不同大小浮點數的不同浮點運算的結果。
如果不同架構中不同數據類型的定義有所不同,您可能會遇到麻煩。
「float」的大小在ANSI C中沒有正式定義,在某些平臺上可以是4個字節,而在其他平臺上可以是8個。 (例如,NSInteger在32位設備上是32位,在64位設備上是64位,我知道它是一個整數類型,但是它是基於平臺改變大小的一種類型的示例)。我不知道Apple是否改變了他們的32位和64位平臺之間的任何數據類型的大小。也許有人確切地知道可以在這裏發出邀請。
最新的iOS設備是64位。我建議檢查float/CGFloat的大小(使用sizeof()。)如果您無法訪問新的64位設備之一,則應該可以使用64位模擬器進行測試。
It's lik
好點。浮動的大小保持不變:http://stackoverflow.com/questions/2107544/types-in-objective-c-on-iphone – 2014-10-18 15:39:29
你能說清楚你的確定性是什麼意思嗎?你有什麼問題?請注意,編譯器設置將影響IEEE浮點符合性,因此您需要檢查Xcode設置以確保在編譯時設置了正確的標誌。 – 2014-10-18 15:16:41
我希望我的代碼具有確定性。我想要一個返回float的操作,以在不同的操作系統和設備上返回完全相同的值。我不關心結果的精確度,它只需要穩定。 http://randomascii.wordpress.com/2013/07/16/floating-point-determinism/ – 2014-10-18 15:31:29
給定完全相同的輸入(包括系統設置),您將獲得完全相同的輸出,適用於任何IEEE浮點操作。對於iOS,你只會冒險iOS版本的整數類型具有不同大小值的差異,並且這隻有在發生溢出(即錯誤)和較小值時纔會發生。 – 2014-10-18 16:39:30