草庐IT

c++ - "floor"是否可能由于浮点舍入错误而返回不准确的结果?

我知道float通常会包含舍入误差。当您取float(或double)的底限或上限以将其转换为整数时,结果值是否准确,或者“底限”值是否仍然是近似值?基本上,像floor(3.14159265)这样的东西是否有可能返回一个本质上是2.999999的值,当您尝试将其转换为int时,它会转换为2? 最佳答案 Isitpossibleforsomethinglikefloor(3.14159265)toreturnavaluewhichisessentially2.999999?floor()函数返回一个精确整数的浮点值。所以你的问题的前

c++ - 我的程序中关于碰撞的一个小错误

我花了一个小时试图解决我的问题。我要画出正在发生的事情。chartrap='Q';charcharacter='L';.....Q....L.....当L向上移动而Q向右移动时,它们发生碰撞,程序结束。但是:.....QL.........当L向左移动而Q向右移动时,它们不会像上面的示例那样发生碰撞,而是发生的情况是:......Q.........这是我的代码。抱歉我的英语不好:(测试移动是'w'、'a'、's'还是'd':voidcave::move(int&x,int&y,charm,charunit){if(m=='W'||m=='w')//ifmovesup{floor[x]

c++ - Floor vs int 转换差异

这个问题在这里已经有了答案:Isfloatingpointmathbroken?(31个答案)关闭6年前。我有一个奇怪的问题。这是我的部分代码:inttemp=1100;intfoo=floor(0.03*temp);intfoo1=0.03*temp;if(foo-foo1){cout如果temp的3%=整数,则foo与foo1相差1。例如:1100*0.03=33.foo=33foo1=32.另外,如果我这样写:intfoo=floor(0.03*1100);intfoo1=0.03*1100;不存在这样的问题。为什么?

c++ - (long long)x 与 C++ 中的 (long long)floor(x) 相同吗?

假设我有一个double数据类型,名为“x”的变量。是否有必要将double转换为longlong数据类型与转换为longlongfloor(x)得到相同的结果。 最佳答案 不,这不一样。强制转换截断(向零舍入),floor函数向下舍入。演示:http://ideone.com/k8JuA9#include#includeintmain(){doublex=-1.4;std::cout 关于c++-(longlong)x与C++中的(longlong)floor(x)相同吗?,我们在St

c++ - 具有相同值但不同类型的参数的 std::floor 函数的不同值

考虑以下几点:#include#includeintmain(){usingstd::cout;usingstd::endl;constlongdoublebe2=std::log(2);cout输出3,23,3为什么输出不同?我在这里缺少什么?这里还有键盘链接:http://codepad.org/baLtYrmy我在linux上使用gcc4.5,如果这很重要的话。 最佳答案 当我添加这个时:cout.precision(40);我得到这个输出:2.999999999999999839754918906642444653698,2

c++ - Visual Studio 不允许我使用 sqrt 或 floor,对重载函数的调用不明确

我调用longlonga=sqrt(n/2);a和n都是longlong但它不会让我编译因为它说我使用sqrt()是一个模棱两可的调用。我根本看不出它在这里可能是模棱两可的。我该如何解决这个问题?我对floor()也有同样的问题。我的包括#include"stdafx.h"#include#includeusingnamespacestd; 最佳答案 sqrt()有几个重载和floor(),对sqrt(longlong)的调用没有“最佳匹配”根据重载决议规则。只需将参数转换为适当的类型——即,longlonga=sqrt(stati

ios - iOS 上的冬至日期

我正在组装一个应用程序,该应用程序在夏至和冬至时都利用了太阳的位置。虽然那里有大量数据表,但我想知道是否有任何标准iOS组件可用于计算或检索冬至日期,而无需嵌入然后查找数据。 最佳答案 从评论中吸取建议,以下是我为从儒略日期中获取带有小时和分钟的公历日期而实现的方法。-(NSDate*)dateFromJulianDate:(double)julianDate{NSCalendar*gregorianCalendar=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCa

android - 我停留在 android 方法 FloatMath.floor API 上没有问题

方法:@OverrideprotectedbooleanisReadyForPullEnd(){@SuppressWarnings("deprecation")floatexactContentHeight=FloatMath.floor(mRefreshableView.getContentHeight()*mRefreshableView.getScale());returnmRefreshableView.getScrollY()>=(exactContentHeight-mRefreshableView.getHeight());}输出:错误:(116,39)错误:找不到符号方

c++ - : (int) blabla * 255. 99999999999997 或 round(blabla*255) 常识正确的是什么?

最近我在webkit资源中发现了这个有趣的东西,与颜色转换(hsl到rgb)有关:http://osxr.org/android/source/external/webkit/Source/WebCore/platform/graphics/Color.cpp#0111constdoublescaleFactor=nextafter(256.0,0.0);//it'sheresomethinglike255.99999999999997//..somecodeskippedreturnmakeRGBA(static_cast(calcSomethingFrom0To1(blablabl

c++ - 避免调用 floor()

我正在编写一段代码,我需要处理不一定在0到1范围内的uvs(2D纹理坐标)。例如,有时我会得到一个u分量为1.2的uv。为了处理这个问题,我正在实现一个包装,它通过执行以下操作导致平铺:u-=floor(u)v-=floor(v)这样做会使1.2变为0.2,这是期望的结果。它还处理负面情况,例如-0.4变为0.6。但是,这些对floor的调用相当慢。我已经使用IntelVTune分析了我的应用程序,我花费了大量的周期来完成这个底层操作。在对这个问题做了一些背景阅读后,我想出了以下函数,它速度更快但仍有很多不足之处(我仍然会受到类型转换的惩罚,等等)。intinlinefasterflo