问题标签 [deterministic]
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.
c++ - 什么可能导致确定性过程产生浮点错误
已经阅读了这个问题,我有理由确定使用浮点运算和相同输入的给定进程(在相同的硬件上,使用相同的编译器编译)应该是确定性的。我正在研究一个不正确的案例,并试图确定是什么原因造成的。
我已经编译了一个可执行文件,我给它提供了完全相同的数据,在单台机器(非多线程)上运行,但是我得到了大约 3.814697265625e-06 的错误,经过仔细的谷歌搜索,我发现它实际上等于 1 /4^9 = 1/2^18 = 1/262144。这非常接近 32 位浮点数的精度级别(根据维基百科大约 7 位)
我怀疑它与已应用于代码的优化有关。我正在使用英特尔 C++ 编译器,并将浮点推测转为快速而不是安全或严格。这会使浮点过程变得不确定吗?是否有其他优化等可能导致这种行为?
编辑:根据 Pax 的建议,我重新编译了代码,浮点推测转为安全,我现在得到了稳定的结果。这让我可以澄清这个问题——浮点推测实际上做了什么,当应用于完全相同的输入时,这如何导致相同的二进制文件(即一次编译、多次运行)产生不同的结果?
@Ben 我正在使用 Intel(R) C++ 11.0.061 [IA-32] 进行编译,并且在 Intel 四核处理器上运行。
ruby - 红宝石解析器
我想知道是否可以使用完全没有回溯的确定性解析器来解析 ruby 语言?
deterministic - 用马尔可夫逻辑避免确定性
我今天刚开始阅读有关马尔可夫链生成器的更多信息,并且对构建它的整个过程非常感兴趣。据我了解,未来状态取决于统计的过去状态到现在。
例子:
你好世界。你好,多莉。你好世界。
在该来源中,“World”大约有 66% 的时间跟随“Hello”。
如果总是这样,那么您如何避免每次都输出相同的结果?统计出现不会随静态字符串而改变,所以我是否可以假设不会生成任何变体,除非源数据以某种方式被修改?
考虑到统计值,我如何从静态源中获得变化,但又允许一些灵活性?使用上面的示例,当“Dolly”仅在 33% 的情况下跟随“Hello”时,如何让我的生成器跟随“Hello”和“Dolly”?
我想我要问的是,我如何根据当前选择之后单词的统计存在来确定下一次选择的概率?这样一来,“多莉”出现了 33% 的时间,而“世界”出现了 66% 的时间——还是我完全迷路了?
java - Java 对序列化对象的表示
我正在寻找 Java 用于序列化对象的格式。默认序列化以二进制格式序列化对象。特别是,我很想知道一个程序的两次运行是否可以不同地序列化同一个对象。
一个对象应该满足什么条件,以便该对象在 Java 的默认序列化/反序列化往返下保持其行为?
xsd - 如何将这个不确定的 XML Schema 重写为确定的?
为什么这是不确定的以及如何解决它?
这应该意味着它<activeyears>
要么是空的,要么包含以任何<from><till>
一个开头<from>
但可以以任何一个结尾的序列。
sql - 如何使用户功能具有确定性
我正在尝试基于 SQL Server 2008 中用户定义函数的确定性行为来实现优化。
在我的测试代码中,我预计不会有额外的函数调用 dbo.expensive,因为它是确定性的并且使用相同的参数值调用。
我的概念不起作用,请解释原因。可以做些什么来实现预期的优化?
sql-server - 有什么方法可以使这个 UDF 具有确定性吗?
我认为这不是确定性的,仅仅是因为DB_NAME()
不是确定性的?如果DB_NAME()
不是确定性的,为什么它不是确定性的?
更新:此版本有效,具有确定性,允许在任何数据库中使用相同的代码并删除数据库名称的硬编码(这也允许我删除另一个关于数据库名称编码的自动系统健康异常)
仅供参考,这是我用于监控潜在问题的系统健康自我报告系统中的代码片段。
algorithm - 什么是确定性快速排序?
我一直在阅读有关快速排序的文章,发现有时它被称为“确定性快速排序”。
这是普通 Quicksort 的替代版本吗?普通快速排序和确定性快速排序有什么区别?
.net - 确定性浮点和 .NET
如何保证 .NET 应用程序(例如 C#)中的浮点计算总是产生相同的位精确结果?尤其是在使用不同版本的 .NET 并在不同平台上运行时(x86 与 x86_64)。浮点运算的不准确性无关紧要。
在 Java 中,我会使用 strictfp。在 C/C++ 和其他低级语言中,这个问题基本上是通过访问 FPU / SSE 控制寄存器来解决的,但这在 .NET 中可能是不可能的。
即使控制了 FPU 控制寄存器,.NET 的 JIT 也会在不同的平台上生成不同的代码。在这种情况下,像 HotSpot 这样的东西会更糟......
为什么我需要它?我正在考虑编写一个实时策略 (RTS) 游戏,它在很大程度上依赖于快速浮点数学以及锁步模拟。本质上,我只会通过网络传输用户输入。这也适用于通过存储用户输入来实现回放的其他游戏。
不是一个选项是:
- 小数(太慢)
- 定点值(使用 sqrt、sin、cos、tan、atan 时太慢且太麻烦……)
- 像 FPS 一样通过网络更新状态:发送数百或数千个单位的位置信息不是一种选择
有任何想法吗?
sql - 为什么 [date] + ([time] - [offset]) 在 SQL Server 2008 中是不确定的?
我正在尝试为我的 IIS 日志表执行以下操作:
但是,SQL Server 2008 告诉我:
该表具有以下定义:
为什么这是不确定的?
我真的需要索引该字段。该表目前有 1598170 行,如果我们不能全时进行索引查找,查询起来很痛苦。由于这是与其他一些日志格式联合的,我们不能很容易地单独使用这两列。