- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这个问题是关于 Math.Floor(double)
和 Math.Ceiling(double)
决定给你上一个或下一个整数值的阈值。我很不安地发现阈值似乎与Double.Epsilon
无关,它是可以用double表示的最小值。例如:
double x = 3.0;
Console.WriteLine( Math.Floor( x - Double.Epsilon ) ); // expected 2, got 3
Console.WriteLine( Math.Ceiling( x + Double.Epsilon) ); // expected 4, got 3
即使将 Double.Epsilon
乘以一个合理的位也没有成功:
Console.WriteLine( Math.Floor( x - Double.Epsilon*1000 ) ); // expected 2, got 3
Console.WriteLine( Math.Ceiling( x + Double.Epsilon*1000) ); // expected 4, got 3
通过一些实验,我能够确定阈值在 2.2E-16 左右,这个值很小,但比 Double.Epsilon
大得多。
出现这个问题的原因是我试图用公式 var digits = Math.Floor( Math.Log( n, 10 ) ) + 1 计算数字中的位数
。此公式不适用于 n=1000
(我完全是偶然发现的),因为 Math.Log( 1000, 10 )
返回一个数字 4.44E-16离其实际值(value)。 (我后来发现内置的 Math.Log10(double)
提供了更准确的结果。)
阈值是否应该绑定(bind)到 Double.Epsilon
或者,如果不是,阈值是否应该被记录(我在官方 MSDN 文档中找不到任何提及) ?
最佳答案
Shouldn't the threshold should be tied to Double.Epsilon
没有。
可表示的 double 并不是均匀分布在实数上。接近于零,有许多可表示的值。但是你离零越远,可表示的 double 就越远。对于非常的大数,即使加 1 到 double 也不会得到新值。
因此,您要寻找的阈值取决于您的数字有多大。它不是常数。
关于c# - Math.Floor(double) 和 Math.Ceiling(double) 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916808/
我尝试运行以下代码,该代码位于 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
我是一名优秀的程序员,十分优秀!