pol*_*nts 33 math floating-point precision angle
我最近接受了这个采访问题:
给定12小时模拟时钟,以度为单位计算小时和分针之间的较小角度.尽你所能精确.
我想知道什么是最简单,最可读,最精确的算法.欢迎使用任何语言的解决方案(但如果您认为有必要,请稍微解释一下).
pol*_*nts 43
事实证明,维基百科确实有最好的答案:
// h = 1..12, m = 0..59
static double angle(int h, int m) {
double hAngle = 0.5D * (h * 60 + m);
double mAngle = 6 * m;
double angle = Math.abs(hAngle - mAngle);
angle = Math.min(angle, 360 - angle);
return angle;
}
Run Code Online (Sandbox Code Playgroud)
基本上:
0.5每分钟度数的速度移动6每分钟度数的速度移动问题解决了.
并且精度不是问题,因为小数部分是.0或者.5,并且在0..360所有这些值的范围内,可以精确地表示double.
小智 5
polygenlubricants的类似于我的java代码.我们假设时钟是12小时而不是24小时.
如果是24小时,那就是另一回事了.此外,另一个假设,假设我们在计算时停止时钟.
一个时钟周期为360度.
分针每分钟可以运行多少度?360/60 =每分钟6度.
每小时可以运行多少度?360/12 =每小时30度(因为时针比分钟慢)
因为它更容易在单位计算,"分钟",让我们得到
"每小时可以运行多少度?"
30/60 =每分钟0.5度.
所以,如果你知道如何获得这些数字,那么问题就在于解决方案.
| 归档时间: |
|
| 查看次数: |
61668 次 |
| 最近记录: |