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. 从我的地理位置计算最近的地方
- 3. 计算国际货币的最大值 - 减去一个单位
- 4. 简单地计算一个一对多
- 5. Java计算双打 - NaN
- 6. 计算弹跳后的方位角
- 7. 计算numpy.inner()在第一个(而不是最后一个)轴
- 8. 如何计算最后一列总计
- 9. 最简单的假日计算方法?
- 10. R - 计算一段时间后的地理位置
- 11. Solr计算月份的最后一天
- 12. 月份计算的最后一天
- 13. 测试1个ULP中的两个浮点数ULP
- 14. 用户地理位置到最近的地址计算
- 15. Async一路与Task.Run在一个简单的计算方法
- 16. 如何计算“kleinster gemeinsamer Nenner”最后一位普通用户
- 17. 计算两个CLLocationCoordinate2D之间的方位
- 18. 排序“位置”,但地方0最后
- 19. 无法计算8位'双'变量
- 20. 计算地理位置
- 21. 计算月末或其最后一秒
- 22. OpenCl最大工作项目每个计算单位
- 23. 计算一个位置之间的接近到其他许多地方
- 24. 计算两个双打的其余部分的Java
- 25. 双错计算
- 26. CSS:位置的最后一个控制后提交表单
- 27. 在wordpress中定位最后一个孩子的下拉菜单?
- 28. 计算最后n个工作日
- 29. 真正简单的算法来计算最后一分钟的请求数
- 30. SQL计算每个ID的最后一笔交易的时间
快乐阅读: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