2台电脑提供不同的输出

时间:2017-02-25 04:01:46

标签: c++ double

这是我的代码的一部分(我集中体现了它):

#include <iostream>
#include <cmath>
#include <iomanip>

int main()
{
    double pi = M_PI;
    long long x = 12026548095792;
    std::cout << std::fixed << std::setprecision(8) << pi * x;
}

我的电脑输出是:

37782515145784.46100000

(Windows 7 x64,处理器:Intel(R)Core(TM)i3-2328M CPU @ 2.20ghz)。
但是当我在SPOJ上运行我的代码时,输​​出是

37782515145784.46093750

(Cluster:Cube(Intel G860))。
请帮我解释一下这个问题。

更新:我使用了代码块16.01,gcc版本5.3.0。

1 个答案:

答案 0 :(得分:1)

double的精度大约是15位数,所以两个数字是相同的(它们在自己的“垃圾部分”不同)

这很可能是由于FP单元内部如何工作(可能是80位)以及传递给FP单元时如何处理双倍(可以通过零填充精度过剩或仅通过携带垃圾更快)

可能function noLazyImages(e) { $(e + '.lazy_res').attr('src', function(_, oldSrc) { var elData = $(this).data(), winWidth = $(window).width(); if (winWidth < 768 && winWidth >= 480) { if(elData['tabletSrc']){ return elData['tabletSrc']; } } else if (winWidth < 480) { if(elData['mobilSrc']){ return elData['mobilSrc']; } } return elData['webSrc']; }); } $(document).ready(function() { noLazyImages("body img"); });定义的方式也很重要。 你尝试过<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <img class="lazy_res" data-web-src="http://image.prntscr.com/image/bdf1d94b64104ef2acd2ceee19882cd1.jpg" data-mobil-src="http://image.prntscr.com/image/caa51ab4900448589201207e57b2630f.jpg" />吗?

一般来说,不要指望FP计算是精确的,并且在任何地方都是一样的。