当前位置: 首页 > news >正文

网站优化预算/seo优化行业

网站优化预算,seo优化行业,足球彩票网站开发,做网站页面怎么做我有一些简单的代码比较两个浮点值,以说明我在GCC优化中看到的问题,并希望有人可以帮我弄清楚为什么它产生的输出在某些可重复的情况下是不同的.首先,我知道将浮点值与进行比较是不好的,因为你可以在尾数中关闭一些非常小的数量,但在我的例子中并非如此.我遇到的问题是基于2个因…

我有一些简单的代码比较两个浮点值,以说明我在GCC优化中看到的问题,并希望有人可以帮我弄清楚为什么它产生的输出在某些可重复的情况下是不同的.

首先,我知道将浮点值与==进行比较是不好的,因为你可以在尾数中关闭一些非常小的数量,但在我的例子中并非如此.我遇到的问题是基于2个因素的输出变化. 1)我传入的优化标志,以及2)如果我取消注释std :: cout线.

为什么代码GCC在-O2下产生不同的运行?

如果取消注释打印,为什么在-O2下编译的代码有效?

这是我正在测试的代码:

#include

const float ft_to_m = (float)0.3048;

const float m_to_ft = (float)3.28083989501;

float FeetToKilometers( float & Feet ) {

float Kilometers;

Kilometers = (ft_to_m * Feet) / 1000.;

return Kilometers;

}

int main(void)

{

float feet = 20000.;

float old_val = 0;

float new_val = FeetToKilometers(feet );

float diff_val = 0;

int *old_int = reinterpret_cast(&old_val);

int *new_int = reinterpret_cast(&new_val);

for (int i=0; i<2; i++)

{

new_val = FeetToKilometers(feet );

diff_val = old_val-new_val;

//std::cout << "Random COUT that makes this work" << std::endl;

if(old_val==new_val)

{

std::cout << "old_val==new_val" << std::endl;

std::cout << std::hex << *old_int << "," << std::hex << *new_int << std::endl;

std::cout << "diff_val = " << diff_val <<:endl>

}

else

{

std::cout << "old_val!=new_val" <<:endl>

std::cout << std::hex << *old_int << "," << std::hex << *new_int << std::endl;

std::cout << "diff_val = " << diff_val <<:endl>

old_val=FeetToKilometers(feet);

}

}

return 0;

}

当使用-O0,-O1和-O3(g -O test.cpp)在linux / cygwin上编译时,我得到以下输出:

$./a.exe

old_val!=new_val

0,40c3126f

diff_val = -6.096

old_val==new_val

40c3126f,40c3126f

diff_val = 0

该输出是正确的,您可以看到浮点数(new_val和old_val)的位是相同的.当我使用-O2标志(g -O2 test.cpp)编译时,我得到以下内容:

$./a.exe

old_val!=new_val

0,40c3126f

diff_val = -6.096

old_val!=new_val

40c3126f,40c3126f

diff_val = 1.19209e-07

我会认为这个输出错了.即使两个值相同,但减去它们和==检查表明它们是不同的.如果我然后取消注释std :: cout行,并使用-O2标志(g -O2 test.cpp)重建,我得到以下内容:

$./a.exe

Random COUT that makes this work

old_val!=new_val

0,40c3126f

diff_val = -6.096

Random COUT that makes this work

old_val==new_val

40c3126f,40c3126f

diff_val = 1.19209e-07

这在old_val == new_val中是正确的,即使减法仍然显示略有差异.

如果脚是2000而不是20000,此代码也可以在-O2下工作.

任何人都可以解释为什么编译的代码行为像这样?我想知道为什么2位相同的浮点值不能与==进行比较.

gcc版本3.4.4

http://www.jmfq.cn/news/5106781.html

相关文章:

  • html5做动态网站建设/北京seo地址
  • wx网站开发/抖音搜索seo排名优化
  • 济南制作网站的公司/磁力猫torrentkitty官网
  • 做宣传单用什么网站/职业培训学校
  • 建设一个最普通网站要多少钱/一键优化清理
  • b2b2c平台网站建设/中国互联网协会
  • 网站psd切图做响应式效果/网站制作的基本流程
  • 网页生成pdf/百度seo排名规则
  • 最少的钱怎么做网站/旺道网站排名优化
  • 武汉网站推广/搜索引擎优化seo什么意思
  • 设计比例网站/网络品牌推广
  • 长沙做网站要多少钱/网页制作成品
  • win7 iis新建网站/超级外链工具有用吗
  • 网站建设员工技能要求/关键词查询工具软件
  • 营销型网站的分类/软文怎么写吸引人
  • 自学做网站可以吗/班级优化大师app
  • 主题 外贸网站 模板/电商网站商品页的优化目标是什么
  • 沈阳成创网站建设公司/seo研究中心教程
  • 模板网站怎么做才美观/免费的网站域名查询565wcc
  • 怎么做网站301转向/seo快速排名软件案例
  • 深圳网站建设公司排行/搜索引擎入口网址
  • 银行网站开发技术方案/网站开发公司哪家好
  • 做原油期货关注什么网站/市场营销策划
  • dedecms做的网站_网站中的图片总是被同一ip恶意点击/品牌关键词优化哪家便宜
  • 会网站建设好吗/什么是seo站内优化
  • 邯郸单位网站建设/嘉兴seo排名外包
  • 深圳建设管理中心网站/网站seo检测工具
  • 网站不收录/互联网优化是什么意思
  • wordpress 二维码插件下载地址/seo营销推广多少钱
  • 网站标签优化/免费申请网站