在.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 …
我正在考虑开发自己的基于PHP的图库来存储大量图片,可能是成千上万.
在数据库中,我将指向图像的URL,但问题是:我知道让所有这些文件都位于服务器中的同一目录是不切实际的,因为它会减慢对爬网的访问速度,所以,你会怎么做?存储所有这些?某种基于jpeg/png名称的树?
你会推荐我对图像进行分区的规则是什么?
(它将专注于使用cheapo dot coms,因此不可能使用服务器进行修改)
我正在用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结尾的字符串无法做到这一点.
字符串切片(注意:字符串在我的语言中是不可变的).显然,第二较慢(和更容易出错:考虑增加的错误检查begin和end对两种功能).
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) 我编写了以下代码来检查树是否是二进制搜索树.请帮我查一下代码:
好的!代码现在已编辑.以下帖子中有人建议使用这个简单的解决方案:
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) 给定[0..n ^ 3-1]范围内的n个整数的输入集,提供线性时间排序算法.
这是我星期四测试的评论,我不知道如何解决这个问题.
在我的webapp中,我们有许多字段总结了其他字段,这些字段总结了更多字段.我知道这是一个有向无环图.
页面加载时,我计算所有字段的值.我真正想要做的是将我的DAG转换为一维列表,该列表包含计算字段的有效顺序.
例如:A = B + D,D = B + C,B = C + E有效计算顺序:E - > C - > B - > D - > A
现在我的算法只是迭代地插入到List中,但是我遇到了一些开始破坏的情况.我在想什么需要将所有依赖项解决为树结构,并从那里将其转换为一维形式?是否有一个简单的算法将这样的树转换为有效的排序?
在给定一组3D数据点的情况下,在(x,y,z)空间中计算最小二乘平面的算法是什么?换句话说,如果我有一堆像(1,2,3),(4,5,6),(7,8,9)等点,那么如何计算最佳拟合平面f (x,y)= ax + by + c?从一组3D点中获取a,b和c的算法是什么?
我怎样才能有效地实现一个列表数据结构,我可以在列表的头部和末尾有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'的情况下执行此操作,而只是从列表的角度自动反向查看给定列表.如果我从连接开始创建新列表,那么同样应该成立.
我对VS2012项目进行了一些C#单元测试,该项目使用DllImport pinvoke调用VS2010 c ++ DLL.
作为测试项目的预构建事件,我将最新版本的DLL复制到二进制项目进行测试.
如果vstest.discoveryengine正在运行,则会反复失败.似乎'发现引擎'正在加载测试并对DLL保持锁定.
如果我杀了vstest发现引擎,那么我可以构建并运行测试.否则构建失败,VS2012提供运行以前的版本(模型对话框没有'不再显示此消息'选项)
我可以做些什么来强制测试项目在没有实际运行测试时卸载DLL,或者禁用后台发现可执行文件?
我已经通过创建一个名为Kealakekua的可执行文件来破解了一种解决方法,它可以杀死vstest.discoveryengine.x86,vstest.executionengine.x86,并且作为预构建事件的第一部分,它可以复制文件并构建,但是更喜欢不要为我的文件打视觉工作室.
假设我有一个哈希算法,它很好而且流畅(任何一个哈希值的出现几率与其他值相同).
现在说我知道挑选2个哈希并且发生碰撞的几率(为了论证)50000:1.
现在说我挑了100个哈希.考虑到一组2中碰撞的几率,如何计算100个值内的碰撞几率?
对此有什么一般解决方案,以便我可以提出一些哈希尝试,之后赔率低于某个可接受的阈值?例如,我可以说"一批49999哈希值创建具有很高的碰撞机会".
algorithm ×7
math ×2
sorting ×2
tree ×2
binary-tree ×1
c ×1
c# ×1
dependencies ×1
filesystems ×1
formatting ×1
hash ×1
haskell ×1
ieee-754 ×1
image ×1
java ×1
list ×1
performance ×1
queue ×1
statistics ×1
string ×1