小编Pet*_*ham的帖子

格式化C#中输出的双精度数

在.NET中运行与双倍乘法相关的快速实验并阅读了几篇关于C#字符串格式的文章,我认为这样:

{
    double i = 10 * 0.69;
    Console.WriteLine(i);
    Console.WriteLine(String.Format("  {0:F20}", i));
    Console.WriteLine(String.Format("+ {0:F20}", 6.9 - i));
    Console.WriteLine(String.Format("= {0:F20}", 6.9));
}
Run Code Online (Sandbox Code Playgroud)

将是这个C代码的C#等价物:

{
    double i = 10 * 0.69;

    printf ( "%f\n", i );
    printf ( "  %.20f\n", i );
    printf ( "+ %.20f\n", 6.9 - i );
    printf ( "= %.20f\n", 6.9 );
}
Run Code Online (Sandbox Code Playgroud)

但是C#会产生输出:

6.9
  6.90000000000000000000
+ 0.00000000000000088818
= 6.90000000000000000000
Run Code Online (Sandbox Code Playgroud)

尽管我在调试器中显示的值等于6.89999999999999946709(而不是6.9).

与C比较,显示格式要求的精度:

6.900000                          
  6.89999999999999946709          
+ 0.00000000000000088818          
= 6.90000000000000035527          
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

(Microsoft .NET Framework版本3.51 SP1/Visual …

c# floating-point formatting ieee-754

62
推荐指数
5
解决办法
11万
查看次数

存储大量图像

我正在考虑开发自己的基于PHP的图库来存储大量图片,可能是成千上万.

在数据库中,我将指向图像的URL,但问题是:我知道让所有这些文件都位于服务器中的同一目录是不切实际的,因为它会减慢对爬网的访问速度,所以,你会怎么做?存储所有这些?某种基于jpeg/png名称的树?

你会推荐我对图像进行分区的规则是什么?

(它将专注于使用cheapo dot coms,因此不可能使用服务器进行修改)

filesystems tree image

49
推荐指数
5
解决办法
1万
查看次数

为什么以null结尾的字符串?或者:以空值终止与字符+长度存储

我正在用C编写语言解释器,我的string类型包含一个length属性,如下所示:

struct String
{
    char* characters;
    size_t length;
};
Run Code Online (Sandbox Code Playgroud)

因此,我必须花费大量时间在我的解释器中手动处理这种字符串,因为C不包含对它的内置支持.我考虑过切换到简单的以null结尾的字符串只是为了符合底层C,但似乎有很多理由不:

如果使用"length"而不是查找null,则内置边界检查.

您必须遍历整个字符串才能找到它的长度.

你必须做额外的事情来处理以null结尾的字符串中间的空字符.

以空值终止的字符串与Unicode处理不佳.

非空终止字符串可以实习更多,即"Hello,world"和"Hello"的字符可以存储在同一个地方,只是具有不同的长度.使用以null结尾的字符串无法做到这一点.

字符串切片(注意:字符串在我的语言中是不可变的).显然,第二较慢(和更容易出错:考虑增加的错误检查beginend对两种功能).

struct String slice(struct String in, size_t begin, size_t end)
{
    struct String out;
    out.characters = in.characters + begin;
    out.length = end - begin;

    return out;
}

char* slice(char* in, size_t begin, size_t end)
{
    char* out = malloc(end - begin + 1);

    for(int i = 0; i < end - begin; i++)
        out[i] = in[i + …
Run Code Online (Sandbox Code Playgroud)

c string algorithm performance null-terminated

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

检查树是否是二叉搜索树

我编写了以下代码来检查树是否是二进制搜索树.请帮我查一下代码:

好的!代码现在已编辑.以下帖子中有人建议使用这个简单的解决方案:

IsValidBST(root,-infinity,infinity);

bool IsValidBST(BinaryNode node, int MIN, int MAX) 
{
     if(node == null)
         return true;
     if(node.element > MIN 
         && node.element < MAX
         && IsValidBST(node.left,MIN,node.element)
         && IsValidBST(node.right,node.element,MAX))
         return true;
     else 
         return false;
}
Run Code Online (Sandbox Code Playgroud)

java algorithm binary-tree data-structures

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

按线性时间排序?

给定[0..n ^ 3-1]范围内的n个整数的输入集,提供线性时间排序算法.

这是我星期四测试的评论,我不知道如何解决这个问题.

sorting algorithm complexity-theory time-complexity

23
推荐指数
3
解决办法
6万
查看次数

简单依赖算法的问题

在我的webapp中,我们有许多字段总结了其他字段,这些字段总结了更多字段.我知道这是一个有向无环图.

页面加载时,我计算所有字段的值.我真正想要做的是将我的DAG转换为一维列表,该列表包含计算字段的有效顺序.

例如:A = B + D,D = B + C,B = C + E有效计算顺序:E - > C - > B - > D - > A

现在我的算法只是迭代地插入到List中,但是我遇到了一些开始破坏的情况.我在想什么需要将所有依赖项解决为树结构,并从那里将其转换为一维形式?是否有一个简单的算法将这样的树转换为有效的排序?

sorting algorithm tree dependencies directed-acyclic-graphs

23
推荐指数
2
解决办法
8859
查看次数

3D最小二乘平面

在给定一组3D数据点的情况下,在(x,y,z)空间中计算最小二乘平面的算法是什么?换句话说,如果我有一堆像(1,2,3),(4,5,6),(7,8,9)等点,那么如何计算最佳拟合平面f (x,y)= ax + by + c?从一组3D点中获取a,b和c的算法是什么?

algorithm math statistics

23
推荐指数
5
解决办法
6万
查看次数

Haskell中的高效队列

我怎样才能有效地实现一个列表数据结构,我可以在列表的头部和末尾有2个视图,这总是指向一个列表的尾部而没有昂贵的反向调用.即:

start x = []
end x = reverse start -- []
start1 = [1,2,3] ++ start
end start1 -- [3,2,1]
Run Code Online (Sandbox Code Playgroud)

end应该能够在不调用'reverse'的情况下执行此操作,而只是从列表的角度自动反向查看给定列表.如果我从连接开始创建新列表,那么同样应该成立.

algorithm queue haskell list data-structures

23
推荐指数
3
解决办法
9583
查看次数

阻止vstest发现引擎锁定DLL

我对VS2012项目进行了一些C#单元测试,该项目使用DllImport pinvoke调用VS2010 c ++ DLL.

作为测试项目的预构建事件,我将最新版本的DLL复制到二进制项目进行测试.

如果vstest.discoveryengine正在运行,则会反复失败.似乎'发现引擎'正在加载测试并对DLL保持锁定.

如果我杀了vstest发现引擎,那么我可以构建并运行测试.否则构建失败,VS2012提供运行以前的版本(模型对话框没有'不再显示此消息'选项)

我可以做些什么来强制测试项目在没有实际运行测试时卸载DLL,或者禁用后台发现可执行文件?

我已经通过创建一个名为Kealakekua的可执行文件来破解了一种解决方法,它可以杀死vstest.discoveryengine.x86,vstest.executionengine.x86,并且作为预构建事件的第一部分,它可以复制文件并构建,但是更喜欢不要为我的文件打视觉工作室.

visual-studio-2012

21
推荐指数
1
解决办法
5211
查看次数

如何计算哈希算法中碰撞的几率?

假设我有一个哈希算法,它很好而且流畅(任何一个哈希值的出现几率与其他值相同).

现在说我知道挑选2个哈希并且发生碰撞的几率(为了论证)50000:1.

现在说我挑了100个哈希.考虑到一组2中碰撞的几率,如何计算100个值内的碰撞几率?

对此有什么一般解决方案,以便我可以提出一些哈希尝试,之后赔率低于某个可接受的阈值?例如,我可以说"一批49999哈希值创建具有很高的碰撞机会".

algorithm math hash

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