a*2
2 楼
求int sqrt(int x)越界如何处理啊?
看到以前的一个帖子,觉得好像不太对, INT_MAX是2^31-1不是2^32,用(1<<16)还是
会越界,请问下该如何处理?
还有判断越界一般用什么方法?多谢了
看到以前的一个帖子,觉得好像不太对, INT_MAX是2^31-1不是2^32,用(1<<16)还是
会越界,请问下该如何处理?
还有判断越界一般用什么方法?多谢了
d*g
3 楼
两个6TB的硬盘,不打算做RAID。存文档和电影。希望文档能在两个硬盘各存一份,但
是电影就无所谓。请问各位在用黑白DSM的是怎么创建volume或者disk group的?谢谢
!
是电影就无所谓。请问各位在用黑白DSM的是怎么创建volume或者disk group的?谢谢
!
a*2
4 楼
自己顶一下
a*a
5 楼
两个硬盘折腾什么?
做过cron job,用rsync定时备份就是了。
不过在同一台机器上备份,不安全哟。得有份冷备份。
做过cron job,用rsync定时备份就是了。
不过在同一台机器上备份,不安全哟。得有份冷备份。
i*e
6 楼
Good observation.
You are correct, my previous post has bugs and did not address the overflow
issue properly.
Two methods to address:
i) find the upper bound of SQRT(INT_MAX) once and pass it into that function
. The upper bound can be found using a helper function that tests for
overflow. (ie, as soon as the condition when x > x*x is met, we knew x-1 is
the upper bound).
ii) declare the parameter x as unsigned int. Then initialize the upper bound
,
hi = min(n/2, (1<<16) - 1);
Hope this helps.
【在 a**********2 的大作中提到】
: 求int sqrt(int x)越界如何处理啊?
:
: 看到以前的一个帖子,觉得好像不太对, INT_MAX是2^31-1不是2^32,用(1<<16)还是
: 会越界,请问下该如何处理?
: 还有判断越界一般用什么方法?多谢了
You are correct, my previous post has bugs and did not address the overflow
issue properly.
Two methods to address:
i) find the upper bound of SQRT(INT_MAX) once and pass it into that function
. The upper bound can be found using a helper function that tests for
overflow. (ie, as soon as the condition when x > x*x is met, we knew x-1 is
the upper bound).
ii) declare the parameter x as unsigned int. Then initialize the upper bound
,
hi = min(n/2, (1<<16) - 1);
Hope this helps.
【在 a**********2 的大作中提到】
: 求int sqrt(int x)越界如何处理啊?
:
: 看到以前的一个帖子,觉得好像不太对, INT_MAX是2^31-1不是2^32,用(1<<16)还是
: 会越界,请问下该如何处理?
: 还有判断越界一般用什么方法?多谢了
i*e
8 楼
This should also work too :)
The observation is when it overflows, it must be the case M > M*M, so
readjust the upper bound to M-1 when that happens.
int mysqrt(int n) {
int L = 0;
int H = min(n/2, (1<<16));
while (L < H) {
int M = L+(H-L+1)/2;
int M_sqr = M*M;
if (M <= M_sqr && M_sqr <= n)
L = M;
else /* M > M_sqr || (M_sqr > n) */
H = M-1;
}
return L;
}
The observation is when it overflows, it must be the case M > M*M, so
readjust the upper bound to M-1 when that happens.
int mysqrt(int n) {
int L = 0;
int H = min(n/2, (1<<16));
while (L < H) {
int M = L+(H-L+1)/2;
int M_sqr = M*M;
if (M <= M_sqr && M_sqr <= n)
L = M;
else /* M > M_sqr || (M_sqr > n) */
H = M-1;
}
return L;
}
k*j
9 楼
or just test if M*M<0, if so then it overflows.
【在 i**********e 的大作中提到】
: This should also work too :)
: The observation is when it overflows, it must be the case M > M*M, so
: readjust the upper bound to M-1 when that happens.
: int mysqrt(int n) {
: int L = 0;
: int H = min(n/2, (1<<16));
: while (L < H) {
: int M = L+(H-L+1)/2;
: int M_sqr = M*M;
: if (M <= M_sqr && M_sqr <= n)
【在 i**********e 的大作中提到】
: This should also work too :)
: The observation is when it overflows, it must be the case M > M*M, so
: readjust the upper bound to M-1 when that happens.
: int mysqrt(int n) {
: int L = 0;
: int H = min(n/2, (1<<16));
: while (L < H) {
: int M = L+(H-L+1)/2;
: int M_sqr = M*M;
: if (M <= M_sqr && M_sqr <= n)
相关阅读
老款mac pro的机箱可以用来DIY么?第一次装机,大家帮我看看这个单子AMD vega 什么时候出?见过最怪的sale还有安全的地方么?workstation发热求推荐高性价比台式机Asususb 3.1的外置硬盘盒为什么内部是sata?苹果macbookpro最新一代低配降到了1199Intel的Optane真的很NB吗?27/28寸5K的显示器现在除了LG那个ultrafine还有别的选择么?求推荐500刀以内的dell 笔记本电脑amz太靠谱了一开空调网络断,surge protector管用么跟风买了acer chromebook 15请教一下1700x 这个配置贵了吗?自从升级Windows 10, Edge没法用了1700x 这个配置贵了吗?ebay 这个卖主该怎么办,东西不符合呀 (转载)