avatar
solidot上看来的# Programming - 葵花宝典
y*w
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
avatar
t*t
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

avatar
P*i
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

avatar
i*f
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

avatar
f*y
5
是中国的一个网站,用了slashcode release出来的源代码做的网站,什么许可我不清楚
以前比较多翻译slashdot上的文章,现在submit的人多了,也有不少都是国内的新闻了

【在 P****i 的大作中提到】
: 这个solidot跟/.什么关系?照抄还是翻译?
avatar
f*y
6
看下面的评论,有人说按照时间来看这个bug可能是按照一个最新的补丁写出来的

【在 t****t 的大作中提到】
: FT,超级大bug
avatar
f*Q
7
-10==10 on OS X 10.4 too, gcc 4.01.
avatar
y*w
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

avatar
k*k
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

avatar
c*x
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);
}
avatar
t*t
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);

avatar
P*e
12
斑竹在做什么呀

真的是找一句正确的话都很困难啊。
abs
one:

【在 t****t 的大作中提到】
: 真的是找一句正确的话都很困难啊。
:
: abs
: one:

avatar
t*t
13
烧完三把火就跑了呗。

【在 P********e 的大作中提到】
: 斑竹在做什么呀
:
: 真的是找一句正确的话都很困难啊。
: abs
: one:

avatar
c*x
14

I am so sorry you can get the benefit from my post.

【在 t****t 的大作中提到】
: 真的是找一句正确的话都很困难啊。
:
: abs
: one:

avatar
e*w
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);

avatar
k*k
16
LOL

【在 t****t 的大作中提到】
: 真的是找一句正确的话都很困难啊。
:
: abs
: one:

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。