这是我的代码的一部分(我集中体现了它):
#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。
答案 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计算是精确的,并且在任何地方都是一样的。