问题标签 [precision]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - SQL Server 数据类型精度 - Neo,什么是真实的?
SQL Sever 2000文档:
是具有以下有效值的浮点数数据:–3.40E + 38 到 -1.18E - 38、0 和 1.18E - 38 到 3.40E + 38。存储大小为 4 字节。在 SQL Server 中,real 的同义词是 float(24)。
SQL Server 2005文档:
real 的 ISO 同义词是 float(24)。
编辑:鉴于我正在阅读的内容,它说精度是 7,但我可以在我的数据库(SQL Server 2005)中输入最大为 9 的内容,见下文,如此处问题号所述。7.
示例:0.180000082
real的真正精度是多少,是否有配置选项(即:兼容模式)会影响精度?
ruby - 为什么 Math.sqrt(i*i).floor == i?
我想知道这是否属实:当我取平方整数的平方根时,例如
我会得到一个非常接近的浮点数123
。由于浮点表示精度,这可能类似于 122.99999999999999999999 或 123.000000000000000000001。
因为floor(122.999999999999999999)
是 122,我应该得到 122 而不是 123。所以我预计floor(sqrt(i*i)) == i-1
在大约 50% 的情况下会这样。奇怪的是,对于我测试过的所有数字,floor(sqrt(i*i) == i
. 这是一个测试前 1 亿个数字的小 ruby 脚本:
上面的脚本从不打印任何东西。为什么呢?
更新:感谢您的快速回复,这似乎是解决方案:根据维基百科
任何绝对值小于或等于 2^24 的整数都可以用单精度格式精确表示,任何绝对值小于或等于 2^53 的整数都可以用双精度格式精确表示。
Math.sqrt(i*i) 从 i=9007199254740993,即 2^53 + 1 开始,开始按照我的预期运行。
perl - 如何设置 Perl 的 bignum 的精度级别?
我正在尝试在 Perl 中使用 bignum 模块并希望设置精度。我知道这可以通过模块的 CPAN 页面上详述的单行来完成:
...这将打印出 20 到 50 位精度的平方根,但我想知道是否有任何方法可以在脚本中设置精度,例如:
到目前为止,我已经在这里、Google 和 PerlMonks 进行了搜索,但没有任何运气。提前致谢。
c# - C# DateTime.Now 精度
我只是在进行一些单元测试时遇到了 DateTime.UtcNow 的一些意外行为。看来,当您快速连续调用 DateTime.Now/UtcNow 时,它似乎会在比预期更长的时间间隔内返回相同的值,而不是捕获更精确的毫秒增量。
我知道有一个更适合进行精确时间测量的 Stopwatch 类,但我很好奇是否有人可以在 DateTime 中解释这种行为?是否记录了 DateTime.Now 的官方精度(例如,精确到 50 毫秒?)?为什么 DateTime.Now 的精度低于大多数 CPU 时钟可以处理的精度?也许它只是为最低公分母 CPU 设计的?
c# - C# 到 SQL 浮点值的转换
我正在使用 C# 和 SQL 2005。我已将值0.2的浮点变量存储到实际类型的表列中。当我打开表格查看数值时,我发现数值为 0.200000029... 已知问题,real 是近似类型。但是,我使用 management studio 将值更改为 0.2 并重新加载了表。数据库现在显示值为 0.2。
问题出在 C# 和 SQL 之间。是否可以将 C# 中的值存储为 SQL 管理工作室中的值?我想是的,但不知道如何。
任何人都可以帮忙吗?非常感谢。
托马斯
c# - C# - 数字非常小的问题 - 双数据类型中的数字不足
我正在用 C# 编写一个程序,它假设计算非常小的数字。但是,我所有的计算都得到了 NaN 值,因为它们对于“双”数据类型来说太小了。
C# 中是否有处理这种情况的选项?
谢谢,伊甸园。
java - Java BigDecimal 三角函数
我正在开发一个数学解析器,它能够像'5+b*sqrt(c^2)'
. 我正在使用 ANTLR 进行解析并取得良好进展。现在我跌倒在 Java 类上BigDecimal
并想:嘿,为什么不在这里考虑精度。
我的问题是 Java API 没有为BigDecimal
s like提供三角函数方法java.lang.Math
。你知道是否有像 Apache Commons 这样的优秀数学库来处理这个问题?
另一个问题是如何实现幂法,以便我可以用BigDecimal
s 计算 4.9 ^ 1.4。这可能吗?
还感谢有关数值计算的书籍请求。
c++ - 机器精度
我想知道是否有像 eps 这样的东西来表示 C++ 中机器精度的值?我可以将它用作双精度可以表示的最小正数吗?是否可以使用 1.0/eps 作为双精度可以表示的最大正数?我在哪里可以找到 C++ 和 C 标准库中的 eps?
谢谢并恭祝安康!
更新:
出于我的目的,我想将权重计算为距离的倒数,例如反距离加权插值(http://en.wikipedia.org/wiki/Inverse_distance_weighting)。
但是距离可以为 0,我需要使权重适合计算。如果只有一个距离 dist[i] 为 0,我希望其对应的值 values[i] 占主导地位。如果有几个距离为 0,我希望它们的值对结果做出同样的贡献。知道如何实施吗?
java - 为什么这个方位计算如此不准确?
甚至有那么不准确吗?我用 Apfloat 任意精度重新实现了整个事情,这没有什么区别,我应该从一开始就知道!!
测试中的第一个断言给出了这个:
java.lang.AssertionError:预期:<270.0> 但原为:<270.29389750911355>
0.29似乎还有很长的路要走?这是我选择实施的公式吗?
python - 在 Windows 上模拟 Linux 的浮点字符串转换行为
我在输出浮点数时遇到了一个烦人的问题。当我在 Windows 上以 2 个小数点的精度格式化 11.545 时,它输出“11.55”,正如我所料。但是,当我在 Linux 上执行相同操作时,输出为“11.54”!
我最初在 Python 中遇到了这个问题,但进一步调查表明差异在于底层 C 运行时库。(两种情况下的体系结构都是 x86-x64。)在 Windows 和 Linux 上运行以下 C 行会产生不同的结果,就像在 Python 中一样。
为了更清楚地说明这一点,我将数字打印到小数点后 20 位 ( "%.20f"
):
我知道 11.545 不能精确地存储为二进制数。所以看起来正在发生的事情是,Linux 以尽可能高的精度输出它实际存储的数字,而 Windows 输出它的最简单的十进制表示,即。试图猜测用户最有可能的意思。
我的问题是:是否有任何(合理的)方法来模拟 Windows 上的 Linux 行为?
(虽然 Windows 的行为肯定是直观的,但在我的情况下,我实际上需要将 Windows 程序的输出与 Linux 程序的输出进行比较,而 Windows 是我唯一可以改变的。顺便说一下,我试图查看 的 Windows 源代码printf
,但执行 float->string 转换的实际函数是_cfltcvt_l
,并且它的源代码似乎不可用。)
编辑:情节变厚了!关于这是由不精确的表示引起的理论可能是错误的,因为0.125确实具有精确的二进制表示,并且在输出时仍然不同'%.2f' % 0.125
:
但是,round(0.125, 2)
在 Windows 和 Linux 上都返回 0.13。