Tag: 精度

以毫秒的精度获取DateTime.Now

我怎样才能精确构造一个毫秒精度的实际时间的时间戳? 我需要像16.4.2013 9:48:00:123。 这可能吗? 我有一个应用程序,其中我每秒采样值10次,我需要在一个图表中显示它们。

为什么添加0.1多次保持无损?

我知道0.1十进制数不能完全用有限的二进制数来表示( 解释 ),所以double n = 0.1会失去一些精度,不会精确到0.1 。 另一方面, 0.5可以精确地表示,因为它是0.5 = 1/2 = 0.1b 。 话虽如此,可以理解的是,加三次 0.1不会给0.3所以下面的代码打印为false : double sum = 0, d = 0.1; for (int i = 0; i < 3; i++) sum += d; System.out.println(sum == 0.3); // Prints false, OK 但是那五点加0.1会给0.5呢? 以下代码打印true : double sum = 0, d = 0.1; for (int […]

如何解释数据库中数字的精确性和规模?

我在数据库中指定了以下列:decimal(5,2) 这个怎么解释呢? 根据在SQL Server Management Studio中查看的列上的属性,我可以看到这意味着:decimal(数字精度,数值范围)。 精度和规模在实质上意味着什么? 将这个解释为一个小数位数,5位数和两位小数,即12345.12 PS我已经能够确定一个同事的正确答案,但很难在网上find答案。 因此,我想在这里提供的问题和答案在stackoverflow供将来参考。

为什么通过一个string往返转换不安全的双?

最近我不得不把序列化成文本,然后把它取回来。 价值似乎不是等值的: double d1 = 0.84551240822557006; string s = d1.ToString("R"); double d2 = double.Parse(s); bool s1 = d1 == d2; // -> s1 is False 但根据MSDN:标准数字格式string ,“R”选项应该保证往返安全。 往返(“R”)格式说明符用于确保转换为string的数值将被parsing回相同的数值 为什么会发生?

在解释型语言中使用非常大的整数时会出现意外的结果

我试图得到1 + 2 + … + 1000000000的总和,但是我在PHP和Node.js中得到了有趣的结果。 PHP $sum = 0; for($i = 0; $i <= 1000000000 ; $i++) { $sum += $i; } printf("%s", number_format($sum, 0, "", "")); // 500000000067108992 Node.js的 var sum = 0; for (i = 0; i <= 1000000000; i++) { sum += i ; } console.log(sum); // 500000000067109000 正确的答案可以使用计算 1 […]

为了得到最精确的结果,应该以哪种顺序添加浮点数?

这是我在最近的一次采访中被问及的一个问题,我想知道(我实际上并不记得数值分析的理论,所以请帮助我:) 如果我们有一些函数,它会累加浮点数: std::accumulate(v.begin(), v.end(), 0.0); v是一个std::vector<float> ,例如。 在积累这些数字之前sorting这些数字会更好吗? 哪个命令会给出最准确的答案? 我怀疑,按升序排列数字实际上会使数字错误更less ,但不幸的是我无法certificate自己。 PS我意识到这可能与现实世界的编程无关,只是好奇。

JavaScript显示浮点数到2个小数位

我想显示一个数字到2位小数。 我以为我可以在JavaScript中使用toPrecision(2) 。 但是,如果数字是0.05 ,我得到0.0500 。 我宁愿它保持不变。 在JSbin上查看 什么是最好的方法来做到这一点? 我可以考虑编写一些解决scheme,但我想像(我希望)这样的东西是内置的?

浮点限制

我的代码: a = '2.3' 我想显示一个浮点值。 由于a是一个string,我试过: float(a) 我得到的结果是: 2.2999999999999998 我想要解决这个问题。 请,请帮助我。 我正在按照这个教程 。

如何“cout”一个double值的正确的小数位数?

我需要帮助保持double精度。 如果我将一个文字赋值给double,实际值被截断。 int main() { double x = 7.40200133400; std::cout << x << "\n"; } 对于上面的代码片段,输出是7.402 有没有办法来防止这种截断? 还是有一种方法来计算double精度浮点数? 例如, number_of_decimal(x)会给出11,因为input在运行时是未知的,所以我不能使用setprecision() 。 我想我应该改变我的问题:如何将双精度转换为string而不截断浮点。 即 #include <iostream> #include <string> #include <sstream> template<typename T> std::string type_to_string( T data ) { std::ostringstream o; o << data; return o.str(); } int main() { double x = 7.40200; std::cout << type_to_string( […]

在0.0和1.0之间有多less个双数?

这是多年来一直在我心中的事情,但我从来没有花时间去问。 许多(伪)随机数发生器产生0.0到1.0之间的随机数。 在math上,在这个范围内有无限数字,但double是一个浮点数,因此具有有限的精度。 所以问题是: 在0.0和1.0之间有多less个double数? 1和2之间的数字是否一样多? 在100和101之间? 在10 ^ 100和10 ^ 100 + 1之间? 注意:如果它有所作为,我特别感兴趣的是Java的double定义。