小编Pas*_*uoq的帖子

合并LaTeX表中的单元格

我有一个非常简单的表:

\begin{table}[t]
\begin{tabular}{|c||c|c|c|}
\hline
\multirow{2}{*}{Implementation}         & Test 1  & Test2  &  Test3    \\\hline
                                        & \multicolumn{3}{|c|}{results}   \\\hline\hline
\end{tabular}
\end{table}
Run Code Online (Sandbox Code Playgroud)

它的工作几乎是"完美的",我唯一的问题是hline仍然通过我合并的前两个单元格.基本上,它看起来像这样

"-------------------------------------------------"
"|                | Test 1 | Test 2 | Test 3 |"
" ----Implementation-------------------------------"
"|                |     results      |"  
"-------------------------------------------------"
Run Code Online (Sandbox Code Playgroud)

但是,它应该是这样的:

"-------------------------------------------------" 
"|               | Test 1 | Test 2 | Test 3 |"
"   Implementation    ---------------------------"
"|               |      results     |"   
"-------------------------------------------------"
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何摆脱第一列中的线?

谢谢

latex pdflatex

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

无符号位域的类型:int或unsigned int

C99标准的第6.3.1.1节包含:

以下内容可用于任何地方intunsigned int可能使用的表达式:

[...]类型的位字段_Bool, int,signed int,或unsigned int.

如果a int可以表示原始类型的所有值,则该值将转换为int; 否则,它被转换为unsigned int.

在我看来,这意味着unsigned int位字段被提升为int,除非无符号位字段的宽度等于宽度int,在这种情况下最后一个短语适用.

我有以下程序:

struct S { unsigned f:32; } x = { 28349};

unsigned short us = 0xDC23L;

main(){
  int r = (x.f ^ ((short)-87)) >= us;
  printf("%d\n", r);
  return r;
}
Run Code Online (Sandbox Code Playgroud)

还有两个系统来执行这个程序(int在两个系统上都是32位).一个系统说这个程序打印1,另一个系统说它打印0.我的问题是,我应该在哪两个系统中提交错误报告?(我倾向于针对打印0的系统提交报告,因为上面的摘录)

c c99 bit-fields

11
推荐指数
1
解决办法
2280
查看次数

Haskell FFI支持具有可变参数的函数

任何人都可以向我展示一个使用带有可变参数的C函数(例如printf)与Haskell的外部函数接口的示例吗?我试着搜索HaskellWiki,但没有找到这样的例子.

谢谢!

haskell ffi variadic-functions

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

在C中,const变量是否保证在内存中是不同的?

说到字符串文字,C99标准说(6.4.5.6):

如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的.如果程序试图修改此类数组,则行为未定义.

我找不到类似的警告或const变量的明确保证.&x == &y上下文中的表达式可以const int x=12; const int y=12;评估1吗?const变量和字符串文字怎么样(即&x == "\014\000\000"保证0甚至在32位小端平台上)?

对于它的价值,本博客文章中的 "字符串文字"部分给出了问题的背景.

c string const c99

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

从双精度参数开始的80位扩展精度计算的属性

以下是插值函数的两种实现.争论u1始终在0.和之间1..

#include <stdio.h>

double interpol_64(double u1, double u2, double u3)
{ 
  return u2 * (1.0 - u1) + u1 * u3;  
}

double interpol_80(double u1, double u2, double u3)
{ 
  return u2 * (1.0 - (long double)u1) + u1 * (long double)u3;  
}

int main()
{
  double y64,y80,u1,u2,u3;
  u1 = 0.025;
  u2 = 0.195;
  u3 = 0.195;
  y64 = interpol_64(u1, u2, u3);
  y80 = interpol_80(u1, u2, u3);
  printf("u2: %a\ny64:%a\ny80:%a\n", u2, y64, y80);
}
Run Code Online (Sandbox Code Playgroud)

在具有80位 …

c floating-point ieee-754 extended-precision

11
推荐指数
1
解决办法
620
查看次数

OCaml中的toString()等价物

我是OCaml的新手,并尝试调试一些OCaml代码.OCaml中的任何函数是否等同toString()于Java中的函数,通过它可以将大多数对象打印为输出?

ocaml

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

最快的算法,用于识别制作双精度方程x + a == b true的最小和最大x

在静态分析的上下文中,我感兴趣的是确定x以下条件的then-branch中的值:

double x;
x = …;
if (x + a == b)
{
  …
Run Code Online (Sandbox Code Playgroud)

a并且b可以假设为双精度常量(推广到任意表达式是问题中最容易的部分),并且可以假设编译器严格遵循IEEE 754(FLT_EVAL_METHOD为0).运行时的舍入模式可以假设为最接近均匀.

如果用有理数计算是便宜的,那就很简单:x合理区间中包含的双精度数值(b - a - 0.5*ulp1(b)... b - a + 0.5*ulp2(b)) .如果b是偶数则应该包括边界,如果b是奇数则排除,并且ulp1和ulp2是两个稍微不同的"ULP"定义,如果不介意在2的幂上失去一点精度,则可以采用相同的定义.

不幸的是,使用有理数的计算可能很昂贵.考虑另一种可能性是通过二分法获得每个边界,在64个双精度加法中(每个操作决定结果的一位).获得下限和上限的128个浮点加法可能比基于数学的任何解更快.

我想知道是否有办法改进"128浮点添加"的想法.实际上我有自己的解决方案,包括更改舍入模式和nextafter调用,但我不想让任何人的风格痉挛,并使他们错过比我现在拥有的更优雅的解决方案.另外我不确定两次更改舍入模式实际上比64个浮点加法更便宜.

c floating-point ieee-754

11
推荐指数
1
解决办法
422
查看次数

由合同和构造者设计

我正在为学校目的实现我自己的ArrayList,但为了调整一些东西,我正在尝试使用C#4.0代码契约.一切都很好,直到我需要将Contracts添加到构造函数中.我应该在空参数构造函数中添加Contract.Ensures()吗?

    public ArrayList(int capacity) {
        Contract.Requires(capacity > 0);
        Contract.Ensures(Size == capacity);

        _array = new T[capacity];
    }

    public ArrayList() : this(32) {
        Contract.Ensures(Size == 32);
    }
Run Code Online (Sandbox Code Playgroud)

我会说是的,每种方法都应该有明确的合同.另一方面,如果它只是将工作委托给"主"构造函数,为什么要这样做呢?逻辑上,我不需要.

我认为在两个构造函数中明确定义合同有用的唯一方面是,如果将来我们对合同有Intelisense支持.如果发生这种情况,明确每种方法所具有的合同是非常有用的,因为它出现在Intelisense中.

此外,是否有任何书籍更深入地了解合同设计的原则和用法?有一件事是了解如何在一种语言中使用Contracts的语法(在本例中为C#),另一种是知道如何以及何时使用它.我阅读了几篇教程和Jon Skeet的C#深度文章,但是如果可能的话,我想更深入一些.

谢谢

.net c# design-by-contract code-contracts c#-4.0

10
推荐指数
1
解决办法
2318
查看次数

在OCaml中抑制穷举匹配警告

我在修复OCaml编译器给我的警告方面遇到了问题.

基本上我解析可以由组成的表达式Bool,IntFloat.

我有一个符号表,跟踪用其类型声明的所有符号:

type ast_type = Bool | Int | Float
and variables = (string, int*ast_type) Hashtbl.t;
Run Code Online (Sandbox Code Playgroud)

int后面在所有变量数组中使用的索引在哪里.

然后我有一个表示变量值的具体类型:

type value =
  | BOOL of bool
  | INT of int
  | FLOAT of float
  | UNSET
and var_values = value array
Run Code Online (Sandbox Code Playgroud)

我试图在布尔表达式中定义变量引用的行为,所以我要做的是

  • 检查变量是否已声明
  • 检查变量是否具有bool类型

要做到这一点,我有这个代码(s是变量的名称):

| GVar s ->
            begin
                try
                    let (i,t) = Hashtbl.find variables s in
                        if (t != Bool) then
                            raise (SemanticException (BoolExpected,s))
                        else
                            (fun s -> let …
Run Code Online (Sandbox Code Playgroud)

warnings ocaml functional-programming pattern-matching

10
推荐指数
1
解决办法
4090
查看次数

改进lambda代码OCaml会产生断言

我想改进为"断言"OCaml 3.12.1构造生成的lambda代码.这是一个例子:

let f x =
    assert (x = 4);
    assert (2 + x = 6);
    assert (x - x = 0);
    exit x
Run Code Online (Sandbox Code Playgroud)

上面的文件longfilename.ml代表了我希望改进lambda代码生成的大型OCaml模块.它编译为:

$ ocamlopt -S longfilename.ml
$ cat longfilename.s
...
    .data
    .quad   3072
_camlLongfilename__2:
    .quad   L100007
    .quad   9
    .quad   9
    .quad   2300
L100007: .L100007:
    .ascii  "longfilename.ml"
    .byte   0
    .data
    .quad   3072
_camlLongfilename__3:
    .quad   L100006
    .quad   7
    .quad   9
    .quad   2300
L100006: .L100006:
    .ascii  "longfilename.ml"
    .byte   0
    .data
    .quad   3072
_camlLongfilename__4:
    .quad   L100005
    .quad   5
    .quad   9
    .quad …
Run Code Online (Sandbox Code Playgroud)

ocaml

10
推荐指数
1
解决办法
222
查看次数