标签: correctness

带返回的switch语句 - 代码正确性

假设我在C中有大约这个结构的代码:

switch (something)
{
    case 0:
      return "blah";
      break;

    case 1:
    case 4:
      return "foo";
      break;

    case 2:
    case 3:
      return "bar";
      break;

    default:
      return "foobar";
      break;
}
Run Code Online (Sandbox Code Playgroud)

现在很明显,"破发" S是没有必要的代码正常运行,但它有点样子不好的做法,如果我不把它们放在那里给我.

你怎么看?删除它们可以吗?或者你会保持他们增加"正确性"?

c correctness switch-statement

82
推荐指数
8
解决办法
9万
查看次数

Sakamoto算法的正确性找到星期几

我使用Sakamoto的算法来查找给定日期的星期几.谁能告诉我这个算法的正确性?我想从2000年到2099年.

维基百科的算法仅供参考.

int dow(int y, int m, int d)
{
   static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
   y -= m < 3;
   return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
Run Code Online (Sandbox Code Playgroud)

c algorithm correctness dayofweek

59
推荐指数
1
解决办法
3万
查看次数

何时使用std :: ref是必要的?

考虑:

std::tuple<int , const A&> func (const A& a) 
{
  return std::make_tuple( 0 , std::ref(a) );
}
Run Code Online (Sandbox Code Playgroud)

是否std::ref需要编写正确且可移植的代码?(没有它就编译好了)

背景:

如果我删除std::ref我的代码生成没有任何警告(g++-4.6 -Wall),但没有正确运行.

如有兴趣,可定义A:

struct A {
  std::array<int,2> vec;
  typedef int type_t;

  template<typename... OPs,typename... VALs>
  A& operator=(const std::pair< std::tuple<VALs...> , std::tuple<OPs...> >& e) {
    for( int i = 0 ; i < vec.size() ; ++i ) {
      vec[i] = eval( extract(i,e.first) , e.second );
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

c++ portability correctness c++11

24
推荐指数
3
解决办法
8246
查看次数

我什么时候需要指定JavaScript协议?

我的印象是,我只需要在URL属性中使用JavaScript时指定"协议",例如在hrefs中.这是唯一"有用"的背景javascript:吗?

明智的:

<a href="javascript:alert('Hello')">World!</a>
Run Code Online (Sandbox Code Playgroud)

愚蠢:

<form onsubmit="javascript:alert('oops!')">
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?或者是否需要注意一些模糊的bug /用例?

javascript correctness

20
推荐指数
3
解决办法
6353
查看次数

在Haskell/Idris中打开类型级别证明

在Idris/Haskell中,可以通过注释类型和使用GADT构造函数来证明数据的属性,例如使用Vect,但是,这需要将属性硬编码到类型中(例如,Vect必须是与List不同的类型).是否可以使用具有开放属性集的类型(例如包含长度和运行平均值的列表),例如通过重载构造函数或使用效果的静脉?

haskell correctness proof category-theory idris

16
推荐指数
1
解决办法
544
查看次数

哪个编译器是对的?需要模板化返回类型之前的'模板'吗?

这段代码(取自这个问题)用g ++(如图所示)编译得很好,所以template返回类型就在那之前.相反,VC10不会使用以下错误编译该代码:

错误C2244:'A :: getAttr':无法将函数定义与现有声明匹配

如果我删除了template,VC10很高兴,但g ++尖叫这个错误:

错误:非模板'AttributeType'用作模板
注意:使用'A :: template AttributeType'表示它是模板

是否因为VC的两阶段查找失败或原因是什么?哪个编译器就在这里?我怀疑g ++是正确的,因为我template在这里需要一个模糊的记忆,比如rebind分配器里面的模板.


编辑:我们有一个胜利者:g ++/GCC(惊喜......).


template <typename T, typename K>
class A {
public:
    T t;
    K k;

    template <int i, int unused = 0>
    struct AttributeType{
    };

    template <int i>
    AttributeType<i> getAttr();

};

template <typename T, typename K>
template <int i>
typename A<T, K>::template AttributeType<i> A<T, K>::getAttr() {
//                ^^^^^^^^ -- needed or not?
    return t; …
Run Code Online (Sandbox Code Playgroud)

c++ templates correctness g++ visual-c++

15
推荐指数
1
解决办法
743
查看次数

显示两种不同的斐波那契函数是等价的

我正在努力学习如何正确地证明程序的正确性.我从头开始,在第一步/主题介绍中挂断了.

本文关于全函数规划的文章中,给出了斐波那契函数的两个定义.传统的一个:

fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
--fib (n+2) = fib (n+1) + fib (n+2) --The definition as given in the paper 
                                    --It seems incorrect to me. Typo?
Run Code Online (Sandbox Code Playgroud)

和我以前从未见过的尾递归版本:

fib' n = f n 0 1
f 0 a b = a
f n a b = f (n-1) b (a+b)
Run Code Online (Sandbox Code Playgroud)

该论文随后声称,通过归纳证明两个函数对所有正整数n都返回相同的结果是"直截了当"的.这是我第一次想到分析这样的程序.认为你可以证明两个程序是等价的,这是非常有趣的,所以我立即尝试通过归纳自己来做这个证明.要么我的数学技能都生锈了,要么任务实际上并不那么简单.

我证明了n = 1

fib' 1 = f 1 0 1
       = f 0 1 1 …
Run Code Online (Sandbox Code Playgroud)

haskell correctness functional-programming fibonacci induction

15
推荐指数
4
解决办法
1246
查看次数

无抛出VirtualMachineError保证

我是从C++来的Java.在C++世界中,我们注意异常安全,并注意,mutator可以在mutator本身抛出的异常或它委托给它的方法(最小,强,无抛出)时提供不同的保证.实现具有强异常保证的方法需要保证一些基本操作永远不会抛出异常.JLS声明哪些操作可以抛出哪种异常,但VirtualMachineError错误会带来问题.答曰JLS:

内部错误或资源限制阻止Java虚拟机实现Java编程语言的语义; 在这种情况下,VirtualMachineError抛出一个子类的实例 .

JLS没有再说了VirtualMachineError."内部错误"意味着JVM中的一个错误,所以我对这种情况不感兴趣:面对JVM中的错误,所有的赌注都是关闭的.但是那个"资源限制"案例呢?是否存在因资源限制而保证永不失败的操作?

java jvm correctness exception

14
推荐指数
1
解决办法
4756
查看次数

尝试/尝试使用资源和Connection,Statement和ResultSet关闭

我最近和我的教授讨论了如何处理基本的jdbc连接方案.假设我们想要执行两个查询,这就是他的建议

public void doQueries() throws MyException{
    Connection con = null;
    try {
        con = DriverManager.getConnection(dataSource);
        PreparedStatement s1 = con.prepareStatement(updateSqlQuery);
        PreparedStatement s2 = con.prepareStatement(selectSqlQuery);

        // Set the parameters of the PreparedStatements and maybe do other things

        s1.executeUpdate();
        ResultSet rs = s2.executeQuery();

        rs.close();
        s2.close();
        s1.close();
    } catch (SQLException e) {
        throw new MyException(e);
    } finally {
        try {
            if (con != null) {
                con.close();
            }
        } catch (SQLException e2) {
            // Can't really do anything
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种方法,我有两个问题:

1.A),我认为,如果有异常,我们做"其他的事情",或者在该行抛出rs.close()还是 …

java correctness try-with-resources

13
推荐指数
3
解决办法
2万
查看次数

证明多线程算法的正确性

多线程算法特别难以设计/调试/证明.Dekker的算法是设计正确的同步算法有多么困难的一个主要例子.Tanenbaum的现代操作系统在其IPC部分中充满了示例.有没有人有这方面的好参考(书籍,文章)?谢谢!

theory algorithm multithreading correctness proof

11
推荐指数
2
解决办法
1852
查看次数