小编Sta*_*tas的帖子

为什么D + 0.1 + 0.2 == 0.3?

assert(0.1 + 0.2 != 0.3); // shall be true
Run Code Online (Sandbox Code Playgroud)

是我最喜欢的检查,语言使用本机浮点运算.

C++

#include <cstdio>

int main()
{
   printf("%d\n", (0.1 + 0.2 != 0.3));
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/ErBMd

蟒蛇

print(0.1 + 0.2 != 0.3)
Run Code Online (Sandbox Code Playgroud)

输出:

True
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/TuKsd

其他例子

为什么D不适用?理解D使用本机浮点数.这是一个错误吗?他们是否使用某些特定的数字代表?别的什么?很混乱.

d

import std.stdio;

void main()
{
   writeln(0.1 + 0.2 != 0.3);
}
Run Code Online (Sandbox Code Playgroud)

输出:

false
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/mX6zF


UPDATE

感谢LukeH.这是在那里描述的浮点常数折叠的效果.

码:

import std.stdio;

void main()
{
   writeln(0.1 + 0.2 != 0.3); // …
Run Code Online (Sandbox Code Playgroud)

floating-point d floating-accuracy constantfolding

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

D2语言是否已准备好投入生产?

这些最后几天我一直热切地学习D语言.作为数百万行C++代码的支持者,对我来说,这似乎是一个梦想.我们支持高性能低延迟系统,显然C++是过去十年中唯一的选择.现在,我看到D.

所以,我的问题非常明显.我可以开始考虑将商业软件产品迁移到D语言吗?是否有从头开始在D上编写此类迁移或现有大型商业软件产品的示例?

现在如何投资这种语言是否安全?我们有生产质量的编译器和调试器吗?我们可以假设他们会得到支持和发展吗?

如果您有从C++到D的迁移经验,那么很高兴听到您的意见.

PS.DI意味着D2

谢谢

d

30
推荐指数
3
解决办法
3048
查看次数

list.extend和list comprehension

当我需要在列表中添加几个相同的项目时,我使用list.extend:

a = ['a', 'b', 'c']
a.extend(['d']*3)
Run Code Online (Sandbox Code Playgroud)

结果

['a', 'b', 'c', 'd', 'd', 'd']
Run Code Online (Sandbox Code Playgroud)

但是,如何与列表理解类似?

a = [['a',2], ['b',2], ['c',1]]
[[x[0]]*x[1] for x in a]
Run Code Online (Sandbox Code Playgroud)

结果

[['a', 'a'], ['b', 'b'], ['c']]
Run Code Online (Sandbox Code Playgroud)

但我需要这个

['a', 'a', 'b', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python list-comprehension list

26
推荐指数
4
解决办法
2万
查看次数

OCaml中是否有中缀函数组合运算符?

只是一个简单的问题.我想知道在标准库(或在Jane Street的核心或电池中)中定义的OCaml中是否存在中缀函数组合运算符,就像Haskell中的(.)函数一样,它为我们节省了很多括号,因为我们可以编写(f . g . h) x而不是不太吸引人f (g (h x))).

谢谢大家.

ocaml ocaml-batteries ocaml-core

23
推荐指数
4
解决办法
1万
查看次数

Go语言中的观察者模式

此问题非常常见:对象应在发生某些事件时通知其所有订户.在C++中我们可以使用boost::signals或其他东西.但是如何用Go语言做到这一点?很高兴看到一些工作代码示例,其中有几个对象订阅了发布者并处理了通知.

谢谢

go observer-pattern

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

VIM:如何替换一个单词

我猜,问题很常见.比方说,我们有一个源文件,希望用另一个字符串替换一些字符串.

通常,我使用以下命令:

:%s/test/testValue/gc
Run Code Online (Sandbox Code Playgroud)

但是,如果字符串很长并且我们只需要触摸它怎么办?键入类似的东西很无聊:

%s/someLongAndDirtyString/somelongAndDirtystring/gc
Run Code Online (Sandbox Code Playgroud)

是否可以将光标放在someLongAndDirtyString单词上,按下一些魔术键并在最后一行中获得以下内容?

%s/someLongAndDirtyString/someLongAndDirtyString/gc
Run Code Online (Sandbox Code Playgroud)

然后我们可以稍微更改新字符串并继续替换.

当然,这只是一个想法.请为我提供进行此类替换的最佳方式.

谢谢

vim replace

12
推荐指数
2
解决办法
4184
查看次数

"hg mv"命令的执行情况如何

比方说,有file.txt一个回购,有两个人正在攻击它.其中一个移动file.txt到另一个文件夹,hg mv并立即将其推入回购.当同事决定推出自己的补足措施时,Mercurial是否有可能自动将更改从原始更改file.txt为移动file.txt

我太乐观了吗?

mercurial

9
推荐指数
3
解决办法
5832
查看次数

OCaml和类型中的int*int vs(int*int)

type foo = A of int * int | B of (int * int)
Run Code Online (Sandbox Code Playgroud)

int * int(int * int)那里有什么区别?我看到的唯一区别是模式匹配:

let test_foo = function
  | A (f, s) -> (f, s)
  | B b -> b
Run Code Online (Sandbox Code Playgroud)

它只是一种语法糖吗?你如何选择使用哪一个?这两种形式之间是否有任何性能差异?

ocaml

9
推荐指数
1
解决办法
1290
查看次数

Ocaml:懒惰列表

如何制作一个表示一系列加倍数的惰性列表?例:

1 2 4 8 16 32
Run Code Online (Sandbox Code Playgroud)

ocaml stream lazy-evaluation

8
推荐指数
2
解决办法
4685
查看次数

Vim:源代码格式化

看看enum:

enum TestEnum
{
    First = 1,
    Second = 2,
    Unknown = 3,
    TestTestTest = 100,
    Zero = 0,
    Foo = 123,
}
Run Code Online (Sandbox Code Playgroud)

我如何利用Vim的全部功能重新格式化?

enum TestEnum
{
    First           = 1,
    Second          = 2,
    Unknown         = 3,
    TestTestTest    = 100,
    Zero            = 0,
    Foo             = 123,
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我正在逐行移动和标签.它与我在任何常规编辑器中所做的相同.怎么做正确的方法?

班级成员也一样:

class Foo
{
    SuperFoo foo1;
    RegularFoo foo2;
    SuperiorFoo foo3;
    YetAnotherFoo foo4;
    Bar bar;
}
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

class Foo
{
    SuperFoo        foo1;
    RegularFoo      foo2;
    SuperiorFoo     foo3;
    YetAnotherFoo   foo4;
    Bar             bar;
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ vim formatting

8
推荐指数
1
解决办法
905
查看次数