- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我之前发布了一个关于 C++ 函数 ceil()
、floor()
和 round()
的精度损失问题.问题链接如下。
Will ceil(), floor() and round() meet loss-of-precision problems when converted to integers?
从我收到的两个答案中,我了解到这些函数本身是精确的,但它们会放大现有的精度损失问题。
我想知道这些问题会被放大到什么程度。具体来说,请考虑以下事项。
a = fun(b);
这里,a
是一个整型值(int
、long
、long long
等), b
是一个float类型的值(float
, double
等),fun()
是ceil()
、floor()
和 round()
。请注意,在以下所有讨论中,我假设不存在上溢或下溢问题。
请注意,在这里,我假设 b 是通过其他一些可能导致精度损失的操作获得的。例如,假设我希望 b 等于 1.1 + 3.9 = 5,但是,由于无法表示 1.1 和 3.9,因此 b 不会以 5 结尾。
我想知道这些问题能在多大程度上影响a的值(value)。具体来说,a 的正确值(即,如果 b 没有精度损失)与实际获得的值(即,如果存在潜在的精度损失)有多少差异。假设我们将正确值表示为 a1,将实际值表示为 a2。在我看来,在任何情况下,以下结论都必须成立。
fun()
是 ceil()
,则 a2 等于 a1 或 a1 + 1。fun()
是 floor()
,则 a2 等于 a1 或 a1 - 1。fun()
是round()
,那么a2等于a1。我的问题是,如果我们忽略上溢和下溢
最佳答案
首先你假设你的错误是b
小的。如果错误在b
大于 1.0 那么你的结论都不成立。但大概在实践中错误 b
很小,这是一个合理的假设。
然而,结论 3 在所有情况下都是错误的。正确的结果是 a2 等于 a1 - 1,或 a1 + 1,或 a1。假设b的正确值为3.49999,实际值为3.50001则round
当正确结果为 3 时将给出 4。反之亦然,如果正确值为 3.50001 而实际值为 3.49999,则 round
当正确结果为 4 时将给出 3。
至于问题 2,没有简单的答案。而且不可能笼统地回答这个问题,所以需要一些关于你的实际问题的细节。听起来您在需要精确结果时试图使用不精确的算术。也许你需要切换到某种多精度算法,有几个库可以做到这一点,MPIR例如。
关于c++ - ceil、floor 和 round 函数会在多大程度上放大精度损失问题,以及如何消除此类影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57264084/
我尝试运行以下代码,该代码位于 Bash 脚本内。 NUMBER=600 LOSS_RATE=0,3 TOT_PKT=100 test=$(python -c "from math import ce
为了使其更通用......我通过这样做更改了 Javascript 中 Number 对象的原型(prototype) Number.prototype.ceil = function() { ret
我需要委托(delegate)“ceil”函数。我的类有方法'ceil',它需要返回cpp 的本地方法'ceil'。怎么调用它? double ceil() { return ceil(); } -这
我运行了一个程序来找出 n + 1 和 2**ceil(log2(n+1)) 之间的区别,其中 n 是 2 的幂。一直呈指数增长 所以根据 Big - O 的定义,不存在满足 - 的常量 c' 2^(
这个问题在这里已经有了答案: Why does the order of '-l' option in gcc matter? [duplicate] (3 个答案) 关闭 3 年前。 我正在尝试在
这个问题在这里已经有了答案: Is floating point math broken? (31 个答案) PHP - Floating Number Precision [duplicate]
所以我刚从一个我做得很好的学校项目中拿回了我的成绩,但是因为我没有调用 ceil(...),评分者扣了 5 分。这是一门使用 CUDA 的并行计算类(class),但问题与任何 CUDA 功能没有直接
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我目前有这样的功能,可以将任何输入数字四舍五入到最接近的模糊整数值: $(function(){ $('#my_value').blur(function() { $(this).va
#include using namespace std; int main() { long long n,m; double ans; cin>>n>>m; an
为什么输出0而不是1? System.out.println((int) (Math.ceil(1/2))); 虽然这个正确输出 1 System.out.println((int) (Math.ce
#include #include int main() { long X; std::cin >> X; long f = ceil(X); std::cout > X 行在 ceil 看到值之前截
我对 matlab 中的 ceil 函数有疑问。当我说“ceil(192.00)”时,它应该返回 192。但是,当我声明一个变量 x 并将其赋值为 14*(256/20)+(256/20) 时,正好是
谁能解释一下? echo ceil( 20.7 * 100 ); // returns 2070 echo ceil( 2070 ); // returns 2070 一切正常,合乎逻辑,
在 VC++ 2008 中,ceil(-0.5) 返回 -0.0。这是通常/预期的行为吗?避免将 -0.0 打印到 i/o 流的最佳做法是什么。 最佳答案 C++中的 ceil来自C标准库。 C 标准
今天早上我丢失了一堆文件,但因为它们是一个卷,在内部和外部都进行了碎片整理,所以 100% 恢复所需的所有信息都可用;我只需要在需要的地方填写 FAT。 我编写了一个程序来执行此操作,并在我转储到文件
当四舍五入到 2 个小数位时,值 4.01132141 将四舍五入为 4.02,因为它超过了 4.01。 你怎么能在 PL/SQL 中做到这一点? 最佳答案 一种方法是做 ceil(value*100
我创建了一个函数来返回两个日期之间的差异 dateDiff($v[17], date('Y/m/d')); if ($days dateDiff('10 oct 2011',date('Y/m/d')
通常我会询问工作方面的问题,所以这里有一些不同的内容。为了以尽可能最 Nerd 的方式实现我的新年决心,我正在 Excel 文件中创建一个健身计划。我会做斜坡组,这意味着每组我都会增加 10% 的重量
是否可以对时间格式变量(例如 09:31:23)使用命令 ceil?我想使用 ceil 来获得 09:32:00。我尝试使用类似于 round(time,'0:01:00'T) 的东西,但我想使用 c
我是一名优秀的程序员,十分优秀!