6
A
回答
4
看起來這個功能很瑣碎;這是基於在接受答案的僞代碼由vulkanino鏈接的問題:
double value = whatever;
long bits = BitConverter.DoubleToInt64Bits(value);
double nextValue = BitConverter.Int64BitsToDouble(bits + 1);
double result = nextValue - value;
對於花車,你需要提供自己的執行SingleToInt32Bits
和Int32BitsToSingle
,因爲BitConverter不具備這些功能。
This page顯示java函數中的特例;處理這些應該也是相當微不足道的。
1
phoog答案很好,但有負數,max_double,infinity和NaN的弱點。
phoog_ULP(正x) - >正數。好。
phoog_ULP(負x) - >負數。我會期待正數。
爲了解決這個問題,我建議改爲:
long bits = BitConverter.DoubleToInt64Bits(value) & 0x7FFFFFFFFFFFFFFFL;
下面是需要你應該關心的分辨率邊緣的情況下...
phoog_ULP(X = +/- Max_double 1.797 ... E + 308)的回報無限的結果。 (+1.996 ... e + 292)。
phoog_ULP(x = +/- Infinity)產生NaN。 +預計無限。
phoog_ULP(x = +/- NaN)可能意外地從sNan變爲qNaN。預期沒有變化。在這種情況下,如果符號應該變成+,那麼可以以任何方式爭論。
爲了解決這些問題,我只能看到一系列簡短的if()測試來適應這些,爲了方便起見,可能使用「bits」值。例如:
double ulpc(double value) {
long long bits = BitConverter::DoubleToInt64Bits(value);
if ((bits & 0x7FF0000000000000L) == 0x7FF0000000000000L) { // if x is not finite
if (bits & 0x000FFFFFFFFFFFFFL) { // if x is a NaN
return value; // I did not force the sign bit here with NaNs.
}
return BitConverter.Int64BitsToDouble(0x7FF0000000000000L); // Positive Infinity;
}
bits &= 0x7FFFFFFFFFFFFFFFL; // make positive
if (bits == 0x7FEFFFFFFFFFFFFL) { // if x == max_double (notice the _E_)
return BitConverter.Int64BitsToDouble(bits) - BitConverter.Int64BitsToDouble(bits - 1);
}
double nextValue = BitConverter.Int64BitsToDouble(bits + 1);
double result = nextValue - value;
}
相關問題
- 1. 使用ULP比較雙打(單位在最後)
- 2. 最低精度的ULP單位
- 3. Goldberg紙中的ULP計算
- 4. 計算第一和最後的K位數n的n次方
- 5. 從我的地理位置計算最近的地方
- 6. 計算國際貨幣的最大值 - 減去一個單位
- 7. 簡單地計算一個一對多
- 8. Java計算雙打 - NaN
- 9. 計算行程最遠點的方位
- 10. 計算彈跳後的方位角
- 11. 計算numpy.inner()在第一個(而不是最後一個)軸
- 12. 如何計算最後一列總計
- 13. 最簡單的假日計算方法?
- 14. R - 計算一段時間後的地理位置
- 15. 月份計算的最後一天
- 16. Solr計算月份的最後一天
- 17. GPU計算單位?
- 18. 用戶地理位置到最近的地址計算
- 19. Android:計算兩個位置之間距離的最佳方法
- 20. 測試1個ULP中的兩個浮點數ULP
- 21. 在postgresql中計算最合適的地理位置
- 22. Async一路與Task.Run在一個簡單的計算方法
- 23. 如何計算「kleinster gemeinsamer Nenner」最後一位普通用戶
- 24. 計算兩個CLLocationCoordinate2D之間的方位
- 25. 排序「位置」,但地方0最後
- 26. 計算最後一個關聯記錄具有負面屬性的位置
- 27. 按訂單計算最後一小時的MySQL遞歸
- 28. 計算平方根到50個地方
- 29. 計算R中的方位
- 30. 與兩位小數雙值和最後一個數字
快樂閱讀:http://stackoverflow.com/questions/1668183/find-min-max-of-a-float-double-that-has-the-same-internal-representation – vulkanino 2012-02-28 16:45:07