问题标签 [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.

0 投票
4 回答
140 浏览

optimization - 确定性函数的编译器优化

我正在阅读有关确定性执行的内容,即对于相同的输入,您具有相同的输出。我想知道是否有编译器编写者考虑过在运行时优化确定性函数。例如,采用阶乘函数。如果在运行时,检测到它被连续调用相同的输入值,编译器可以缓存输出值,而不是执行阶乘函数,可以直接使用该输出值。似乎是一个不错的研究课题。有没有关于这个主题的论文或工作?

0 投票
2 回答
347 浏览

sql - 当我(手动)在临时表中缓存表值函数的结果时,为什么查询执行得这么快?

为什么查询版本 2 这么快?

我怀疑数据库引擎多次调用表值函数“GetUsageStatistic”,那么有没有办法告诉引擎“GetUsageStatistic”是确定性的,应该只调用一次?

查询版本 1

查询版本 2

0 投票
1 回答
222 浏览

c++ - 时间敏感的事件记录可能吗?

基本问题

有没有办法在时间敏感(与帧速率无关)系统中记录回放?

任何帮助 - 包括简单的“抱歉,这是不可能的” - 将不胜感激。在过去的几个周末里,我花了将近 20 个小时来处理这个问题,这让我自己发疯了。

详细信息

这是目前针对游戏的,但我正在编写的库被设计为更通用,这个概念不仅仅适用于我的 C++ 编码。

我有一些看起来功能相似的代码......(它是用 C++0x 编写的,但我冒昧地让它更紧凑)

我有一个看起来像这样的单独线程......

现在我想记录用于回放的输入事件以进行测试和一些有限的回放功能。

只需在我标记//REF ALPHA 的位置插入以下代码,我就可以轻松地以精确的时间记录事件

真正的问题是回放这些。我的 LoopTimer 使用高性能计数器 (QueryPreformanceCounter) 具有极高的精度。这意味着使用如下代码代替 //REF BETA 几乎不可能达到相同的时差

这种方法的问题在于,您几乎永远不会达到完全相同的时间,因此您将有几微秒的时间播放与录音不匹配。

我也尝试过事件捕捉。一种令人困惑的术语,但基本上如果 TimeSincePlaybackBegan > NextEvent.TimeSinceRecordingBegan 然后 TimeSincePlaybackBegan = NextEvent.TimeSinceRecordingBegan 和 ElapsedTime 被改变以适应。

它有一些你可以预料到的有趣的副作用(比如一些减速),但不幸的是它仍然导致播放不同步。

对于更多背景信息- 可能是我的时间捕捉方法不起作用的原因 - 我在 UpdateAll 调用的某个地方使用 BulletPhysics。有点像这样...

但我也尝试使用 pBulletWorkd->stepSimulation(diff, 0, 0) 根据http://www.bulletphysics.org/mediawiki-1.5.8/index.php/Stepping_the_World应该可以解决问题但仍然无济于事.

0 投票
5 回答
1005 浏览

c++ - 跨平台的 Clang 是否比 GCC 更具确定性?

我正在考虑用 C++ 编写多用户 RTS 游戏(部分)的可行性。我很快发现,一个硬性要求是游戏模拟必须完全确定服务器和所有客户端的最后一点,以便能够将网络通信限制为用户输入,而不是游戏状态本身. 由于每个人都有不同的计算机,这似乎是一个难题。

那么,是否有一些“神奇”的方法可以让 C++ 编译器创建一个在 Linux(服务器)、Windows 和 Mac 上完全确定的可执行文件?我认为两个主要的 OSS C++ 编译器是 GCC 和 Clang,所以我想知道在这方面是否一个比另一个表现更好。

我也会对任何可用于验证 C++ 确定性的测试套件感兴趣。

[编辑] 通过确定性,我的意思是编译后的程序,给定相同的初始状态,并以相同的顺序输入,将始终在它运行的任何平台上产生相同的输出。所以,也是跨网络。对我来说,一致听起来像是对这种行为的恰当定义,但我不是母语人士,所以我可能会误解确切的含义。

[EDIT#2] 虽然关于确定性/一致性是否重要的​​讨论,以及我是否应该在游戏引擎中以此为目标,以及它在 C++ 中通常有多大的问题,是非常有趣的,但它并没有以任何方式真正回答问题。到目前为止,没有人知道我是否应该使用 Clang 或 GCC 来获得最可靠/确定性/一致的结果。

[EDIT#3] 我突然想到有一种方法可以在 C++ 中获得与在 Java 中完全相同的结果。必须采用 JVM 的开源实现,并提取实现运算符和数学函数的代码。然后你把它变成一个独立的库,并在其中调用内联函数,而不是直接使用运算符。手工操作会很痛苦,但是如果生成代码,那么它是一个完美的解决方案。也许这甚至可以通过类和运算符重载来完成,所以它看起来也很自然。

0 投票
4 回答
1384 浏览

oracle - 是否有类似于 DETERMINISTIC 的 PL/SQL 编译指示,但适用于单个 SQL SELECT 的范围?

在 SQLSELECT语句中,我想执行一个对该SELECT语句范围具有确定性的函数(或者事务也可以):

的许多值t.x是相同的,因此 Oracle 可以省略一次又一次地调用相同的函数,以加快处理速度。但是,如果我将函数标记为DETERMINISTIC,则结果可能会在此查询的多次执行之间缓存。我不能使用的原因DETERMINISTIC是因为my_function使用了一个不时更改的配置参数。

我可以使用其他关键字吗?是否有任何我应该注意的问题(内存问题、并发性等)?或者可能有任何其他技巧,例如每个t.x值只调用一次函数的分析函数(不会对性能产生重大影响)?

0 投票
6 回答
7068 浏览

c - 如何使浮点计算具有确定性?

浮点计算在处理器上既不关联也不分布。所以,

(a + b) + c不等于a + (b + c)

并且a * (b + c)不等于a * b + a * c

有没有办法执行不给出不同结果的确定性浮点计算。当然,这在单处理器上是确定性的,但在多线程程序中,如果线程相加,例如,它就不是确定性的,因为线程可能存在不同的交错。

所以我的问题是,如何在多线程程序中实现浮点计算的确定性结果?

0 投票
3 回答
2103 浏览

deterministic - 给出识别下列语言的 DFA 的状态图。在所有部分中,字母表都是 {0,1 }

我试图掌握绘制 DFA 的窍门。我的以下尝试有以下问题,想知道是否有人可以告诉我我是否正确,或者如果不正确,我做错了什么。谢谢!此外,如果有人有很好的资源来了解有关如何执行这些操作的更多信息,将不胜感激。

给出识别下列语言的 DFA 的状态图。在所有部分中,字母表都是 {0,1 }

{w | w 的长度最多为 5}

在此处输入图像描述

0 投票
1 回答
1964 浏览

grammar - 需要帮助构建确定性有限自动机吗?

以图的形式构造确定性有限自动机的规则是什么?我的教授通过示例进行了解释,但我不确定所有图表必须遵循哪些规则。任何帮助表示赞赏,谢谢!

0 投票
3 回答
11697 浏览

grammar - 这个确定性有限自动机的语言是什么?

鉴于:

在此处输入图像描述

我不知道公认的语言是什么。

通过查看它,您可以获得几个最终结果:

0 投票
6 回答
38791 浏览

mysql - mysql中的确定性函数

我对一个看似简单的概念感到困惑。Mysql 将确定性函数定义为

总是为相同的输入参数产生相同的结果

所以在我的理解中,功能像

不是确定性的(不能保证在两次调用函数之间不会发生删除/更新/插入)。同时,我看到许多功能几乎相同,即根据查询结果返回值,并声明为DETERMINISTIC. 看起来我错过了一些非常基本的东西。

谁能澄清这个问题?

谢谢。

更新 感谢那些回答(+1)的人;DETERMINISTIC到目前为止,关键字的滥用似乎很普遍。对我来说仍然很难相信有这么多人这样做,所以我会等待其他答案。