怎么快速判断一个 double 数是否在另外两个 double 数之间

2018-04-28 13:21:07 +08:00
 keleilei

今天面试被问到这个问题,请大佬们解答一下

3043 次点击
所在节点    Java
8 条回复
choiwanxy
2018-04-28 13:33:08 +08:00
直接大于小于比较不就行了么,double 不能精确等于,但能比大小啊
dyxLike
2018-04-28 13:39:44 +08:00
a+c>2b ?
keleilei
2018-04-28 14:10:02 +08:00
不能用普通比大小的方式,当时问他怎么处理,他也没说
pkookp8
2018-04-28 14:11:35 +08:00
比大小不能用。。。。那相减是否大于 0.00001 这样?
pkookp8
2018-04-28 14:12:01 +08:00
@pkookp8 或者除法是否大于小于 1
ballshapesdsd
2018-04-28 14:32:49 +08:00
计算( c-a )( c-b )是不是负数?
lance6716
2018-04-28 16:13:34 +08:00
估计是从 IEEE754 里实现一个底层的
crb912
2018-04-29 21:07:53 +08:00
我觉得面试官说的"不能用普通的方式比较大小",应该因为浮点数有种特殊的情况:NaN。而且从浮点数的实现而言,似乎也没奇技淫巧可以方便的比较。

假如三个数中间有一个 NaN,你的正常比较方式必然会得到异常。因此要去判断有没有是 NaN,不妨定义一个函数 isnan。
bool isnan(double x)
{
return x != x
}
然后确认没有再比较

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450658

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX