标签: deterministic

如何从varchar到datetime的转换确定性?

这个问题的传统中,根据文档,如何使这个函数具有确定性:

ALTER FUNCTION [udf_DateTimeFromDataDtID]
(
    @DATA_DT_ID int -- In form YYYYMMDD
)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
    RETURN CONVERT(datetime, CONVERT(varchar, @DATA_DT_ID))
END
Run Code Online (Sandbox Code Playgroud)

或者这个(因为字符串/日期文字 - 是的,我也试过'1900-01-01'):

ALTER FUNCTION udf_CappedDate
(
    @DateTimeIn datetime
)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
    IF @DateTimeIn < '1/1/1900'
        RETURN '1/1/1900'
    ELSE IF @DateTimeIn > '1/1/2100'
        RETURN '1/1/2100'

    RETURN @DateTimeIn
END
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 deterministic user-defined-functions

7
推荐指数
2
解决办法
4764
查看次数

在C++和C#中是以预定或随机顺序执行的多个条件检查?

情况:使用许多条件在C++或C#中进行条件检查:

if (condition1 && condition2 && condition3)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

我一直认为不能保证执行这些检查的顺序.所以它不一定是条件1然后是条件2,而不是条件3.我在C++的时代学到了它.我想我被告知或在某处阅读.

直到知道我总是编写安全代码来解决在以下情况下可能的空指针:

if ((object != null) && (object.SomeFunc() != value))
{
    // A bad way of checking (or so I thought)
}
Run Code Online (Sandbox Code Playgroud)

所以我在写:

if (object != null)
{
    if (object.SomeFunc() != value)
    {
        // A much better and safer way
    }
}
Run Code Online (Sandbox Code Playgroud)

因为我不确定首先运行非空检查,然后才会调用实例方法来执行第二次检查.

现在,我们最伟大的社区头脑告诉我,执行这些检查的顺序保证以从左到右的顺序运行.

我很惊讶.对C++和C#语言来说真的如此吗?

有没有人听过我之前听过的版本?

c# c++ deterministic non-deterministic

7
推荐指数
1
解决办法
4121
查看次数

财产决定论

在C#中有什么方法可以将属性标记为确定性的吗?

我问的原因是我经常发现自己声明一个局部变量并将属性读入其中,而不是多次访问该属性.

有没有什么方法可以将属性装饰为确定性的,这样编译器就可以优化对该属性的多次访问?我猜测在这种情况下,类需要是不可变的,并且这样装饰.

这是甚至存在的东西还是我抓着稻草?

c# deterministic properties

7
推荐指数
2
解决办法
315
查看次数

为什么确定性函数在SQL中执行额外的时间?

鉴于下表

create table tmp_test as
 select mod(level, 5) as n
   from dual
connect by level <= 10
        ;
Run Code Online (Sandbox Code Playgroud)

和这个功能

create or replace function test_deterministic (Pn in number
         ) return number deterministic is
begin
   dbms_output.put_line(Pn);
   dbms_lock.sleep(1);
   return Pn;
end;
Run Code Online (Sandbox Code Playgroud)

它执行6次,耗时6秒:

SQL> select test_deterministic(n) from tmp_test;

TEST_DETERMINISTIC(N)
---------------------
                    1
                    2
                    3
                    4
                    0
                    1
                    2
                    3
                    4
                    0

10 rows selected.

1
2
3
4
0
1
Elapsed: 00:00:06.02
Run Code Online (Sandbox Code Playgroud)

我本来希望这次执行5次.如果我在SQL Developer或PL/SQL Developer中运行此SELECT语句,它只执行5次.同样,如果我在Pl/SQL中运行它,它会执行5次:

SQL> begin
  2     for i in ( select test_deterministic(n) from …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql sqlplus deterministic

7
推荐指数
1
解决办法
247
查看次数

在Prolog中实现经常出现的决定论模式

在Prolog中编程时,我经常编写谓词,当所有参数被实例化时,其行为应该是半确定性的(否则其行为应该是非确定性的).

一个具体的用例就是我的谓词walk/3,它实现了图形遍历.由于两个顶点之间可以存在多条路径,因此实例化后(+,+)会给出多个选择点true.然而,这些都是无用的.once/1出于性能原因,必须明确使用调用代码.

%! walk(+Graph:ugraph, +StartVertex, +EndVertex) is semidet.
%! walk(+Graph:ugraph, -StartVertex, +EndVertex) is nondet.
%! walk(+Graph:ugraph, +StartVertex, -EndVertex) is nondet.
%! walk(+Graph:ugraph, -StartVertex, -EndVertex) is nondet.
Run Code Online (Sandbox Code Playgroud)

半决定论可以通过once/1在调用上下文中使用来强制,但我想将半决定论作为谓词的属性来实现walk/3,而不是每次被调用时都需要特别对待的东西.

除了对代码美学的关注之外,调用上下文不必总是知道它的调用是否walk/3是半确定性的.例如:

%! cycle(+Graph:ugraph, +Vertex) is semidet.
%! cycle(+Graph:ugraph, -Vertex) is nondet.

cycle(Graph, Vertex):-
  walk(Graph, Vertex, Vertex).
Run Code Online (Sandbox Code Playgroud)

我提出了以下解决方案,它确实产生了正确的行为.

walk_wrapper(Graph, Start, End):-
  call_ground_as_semidet(walk(Graph, Start, End)).

:- meta_predicate(call_ground_as_semidet(0)).
call_ground_as_semidet(Goal):-
  ground(Goal), !,
  Goal, !.
call_ground_as_semidet(Goal):-
  Goal.
Run Code Online (Sandbox Code Playgroud)

但是,这种解决方案存在不足之处:

  • 它不够通用,例如有时候ground应该是nonvar …

coding-style deterministic prolog

7
推荐指数
1
解决办法
225
查看次数

SQL Server:在SQL Server中设置日期,但保持确定性

(这与在SQL服务器中建立日期相关.)

DATETIME是否存在确定性表达式?当我将其用作计算列公式时:

DATEADD(dd, DATEDIFF(dd, 0, [datetime_column]), 0)
Run Code Online (Sandbox Code Playgroud)

我在该列上放置索引时出错:

无法创建索引,因为键列'EffectiveDate'是非确定性的或不精确的.

但根据定义,DATEDIFF和DATEADD都是确定性函数.捕获量在哪里?可能吗?

sql sql-server indexing deterministic sql-server-2000

6
推荐指数
1
解决办法
2817
查看次数

我可以使用舍入来确保原子浮点运算的确定性吗?

我正在开发一个需要浮点确定性的C应用程序.我还希望浮点运算相当快.这包括IEEE754未指定的标准超越函数,如正弦和对数.与硬件浮点相比,我考虑的软件浮点实现相对较慢,所以我考虑简单地从每个答案中舍去一个或两个最低有效位.精度的损失对我的应用程序来说是一个充分的妥协,但这是否足以确保跨平台的确定性结果?所有浮点值都将是双倍的.

我意识到操作顺序是浮点结果差异的另一个潜在来源.我有办法解决这个问题.

如果今天使用的主要浮点硬件实现的软件实现将是非常好的,所以我可以直接测试这样的假设.

c floating-point deterministic rounding numerical-computing

6
推荐指数
1
解决办法
447
查看次数

IEEE 754-2008 是确定性的吗?

如果我从相同的值开始,并在双精度 64 位 IEEE 754-2008 值上执行相同的原始操作(加法、乘法、比较等),我会得到相同的结果,独立于底层机器吗?

更具体地说:由于ECMAScript 2015指定数字值是

对应于双精度 64 位二进制格式 IEEE 754-2008 值的原始值

我可以得出结论,相同的操作在这里产生相同的结果,独立于环境吗?

javascript floating-point deterministic ieee-754

6
推荐指数
1
解决办法
576
查看次数

来自 Cursor Oracle 的确定性函数调用不起作用

我创建了一个简单的确定性函数,并使用游标中的选择查询调用它,如下所示

CREATE TABLE TEMP
(dt DATE); 

INSERT INTO   TEMP
SELECT SYSDATE FROM DUAL CONNECT BY LEVEL<=3;   
INSERT INTO   TEMP
SELECT SYSDATE+1 FROM DUAL CONNECT BY LEVEL<=3;     

COMMIT;

--2 distinct values
SELECT DISTINCT dt from TEMP;
Run Code Online (Sandbox Code Playgroud)

包装功能

CREATE OR REPLACE PACKAGE dummy_fun
AUTHID CURRENT_USER
IS
    FUNCTION get_data(
                  p_date  IN DATE)
    RETURN DATE
    DETERMINISTIC;

END dummy_fun;
/


CREATE OR REPLACE PACKAGE BODY dummy_fun
IS
     FUNCTION get_data(
                  p_date IN DATE)
    RETURN DATE
    DETERMINISTIC
    IS
        
    BEGIN
         DBMS_OUTPUT.PUT_LINE('get_data with input (p_date=>'||p_date||' called)');
        
        RETURN p_date+1;

    END …
Run Code Online (Sandbox Code Playgroud)

oracle deterministic function oracle12c

6
推荐指数
1
解决办法
67
查看次数

我可以确定性地对任意排列的浮点数的向量求和吗?

假设我有一个(可能很大)的浮点数向量,这些向量是由一些黑盒过程产生的。是否可以计算这些数字的按位可重现的总和?

如果黑盒过程总是以相同的顺序生成数字,那么按位可重现的求和很容易:只需从左到右求和即可。

但是,如果数字以随机顺序生成,也许是因为它们是从异步进程返回和收集的,那么就更难了:我必须对它们进行数字排序。

但是,如果有更多的数字,可能分布在不同的机器上,因此移动它们是不可取的怎么办?

还有一种方法可以确定地对它们求和吗?

algorithm math floating-point deterministic

6
推荐指数
2
解决办法
176
查看次数