y*w 发帖数: 238 | 1 int main () {
int i=2;
if( -10*abs (i-1) == 10*abs(i-1) )
printf ("OMG,-10==10 in linux!\n");
else
printf ("nothing special here\n");
}
同样的C代码,在windows和unix系统中编译运行的结果是nothing special here,只有
linux得到是-10==10。恩,我们的gcc在这里犯了一个低级错误。"
http://linux.solidot.org/linux/07/11/19/0512218.shtml |
t****t 发帖数: 6806 | 2 FT,超级大bug
【在 y*w 的大作中提到】 : int main () { : int i=2; : if( -10*abs (i-1) == 10*abs(i-1) ) : printf ("OMG,-10==10 in linux!\n"); : else : printf ("nothing special here\n"); : } : 同样的C代码,在windows和unix系统中编译运行的结果是nothing special here,只有 : linux得到是-10==10。恩,我们的gcc在这里犯了一个低级错误。" : http://linux.solidot.org/linux/07/11/19/0512218.shtml
|
P****i 发帖数: 12972 | 3 这个solidot跟/.什么关系?照抄还是翻译?
【在 y*w 的大作中提到】 : int main () { : int i=2; : if( -10*abs (i-1) == 10*abs(i-1) ) : printf ("OMG,-10==10 in linux!\n"); : else : printf ("nothing special here\n"); : } : 同样的C代码,在windows和unix系统中编译运行的结果是nothing special here,只有 : linux得到是-10==10。恩,我们的gcc在这里犯了一个低级错误。" : http://linux.solidot.org/linux/07/11/19/0512218.shtml
|
i*****f 发帖数: 578 | 4 真是奇怪
int main()
{
int i=3;
int a=10*abs(i-1);
int b=-10*abs(i-1);
printf("%d %d\n",a,b);
}
结果是
20 20
如果加参数-fno-builtin编译就可以work
【在 y*w 的大作中提到】 : int main () { : int i=2; : if( -10*abs (i-1) == 10*abs(i-1) ) : printf ("OMG,-10==10 in linux!\n"); : else : printf ("nothing special here\n"); : } : 同样的C代码,在windows和unix系统中编译运行的结果是nothing special here,只有 : linux得到是-10==10。恩,我们的gcc在这里犯了一个低级错误。" : http://linux.solidot.org/linux/07/11/19/0512218.shtml
|
f*******y 发帖数: 988 | 5 是中国的一个网站,用了slashcode release出来的源代码做的网站,什么许可我不清楚
以前比较多翻译slashdot上的文章,现在submit的人多了,也有不少都是国内的新闻了
【在 P****i 的大作中提到】 : 这个solidot跟/.什么关系?照抄还是翻译?
|
f*******y 发帖数: 988 | 6 看下面的评论,有人说按照时间来看这个bug可能是按照一个最新的补丁写出来的
【在 t****t 的大作中提到】 : FT,超级大bug
|
f*****Q 发帖数: 1912 | 7 -10==10 on OS X 10.4 too, gcc 4.01. |
y*w 发帖数: 238 | 8 那个链接下面有评论和解释
貌似是gcc source code里面优化中出了bug
c0*abs(x) 优化成了 abs(c0*x)
如果x是常量或者c0=1时不做此优化,其他时候都做,所以c0为负而且不等于1的时候会错
http://www.nabble.com/-PATCH--Fix-PR34130,-extract_muldiv-broken-t4826688.html
【在 i*****f 的大作中提到】 : 真是奇怪 : int main() : { : int i=3; : int a=10*abs(i-1); : int b=-10*abs(i-1); : printf("%d %d\n",a,b); : } : 结果是 : 20 20
|
k*k 发帖数: 508 | 9 c0*abs(x) -> abs(c0*x) 优化了什么?
会错
【在 y*w 的大作中提到】 : 那个链接下面有评论和解释 : 貌似是gcc source code里面优化中出了bug : c0*abs(x) 优化成了 abs(c0*x) : 如果x是常量或者c0=1时不做此优化,其他时候都做,所以c0为负而且不等于1的时候会错 : http://www.nabble.com/-PATCH--Fix-PR34130,-extract_muldiv-broken-t4826688.html
|
c********x 发帖数: 84 | 10 they are wrong, the reason abs() parameter formats are the abs(float) or abs
(double), when the
result assigns to int b, the '-' sign get chopped out. Here is the right one:
#include
#include
int main()
{
int i=3;
int a=10*abs(i-1);
float b= -10.0*abs(i-1);
printf("%d %.0f\n",a, b);
} |
|
|
t****t 发帖数: 6806 | 11 真的是找一句正确的话都很困难啊。
abs
one:
【在 c********x 的大作中提到】 : they are wrong, the reason abs() parameter formats are the abs(float) or abs : (double), when the : result assigns to int b, the '-' sign get chopped out. Here is the right one: : #include : #include : int main() : { : int i=3; : int a=10*abs(i-1); : float b= -10.0*abs(i-1);
|
P********e 发帖数: 2610 | 12 斑竹在做什么呀
真的是找一句正确的话都很困难啊。
abs
one:
【在 t****t 的大作中提到】 : 真的是找一句正确的话都很困难啊。 : : abs : one:
|
t****t 发帖数: 6806 | 13 烧完三把火就跑了呗。
【在 P********e 的大作中提到】 : 斑竹在做什么呀 : : 真的是找一句正确的话都很困难啊。 : abs : one:
|
c********x 发帖数: 84 | 14
I am so sorry you can get the benefit from my post.
【在 t****t 的大作中提到】 : 真的是找一句正确的话都很困难啊。 : : abs : one:
|
e*****w 发帖数: 144 | 15 我倒,abs就是给整型用的,你那个叫fabs。
另外无论如何负号也不会直接被chop掉啊,int会被提升到double。
abs
one:
【在 c********x 的大作中提到】 : they are wrong, the reason abs() parameter formats are the abs(float) or abs : (double), when the : result assigns to int b, the '-' sign get chopped out. Here is the right one: : #include : #include : int main() : { : int i=3; : int a=10*abs(i-1); : float b= -10.0*abs(i-1);
|
k*k 发帖数: 508 | 16 LOL
【在 t****t 的大作中提到】 : 真的是找一句正确的话都很困难啊。 : : abs : one:
|