在C#中浮点math是否一致? 是真的吗?

不,这不是另一个“为什么是(1 / 3.0)* 3!= 1”的问题。 最近我一直在读浮点数; 具体来说, 相同的计算如何在不同的体系结构或优化设置上给出不同的结果 。 对于存储重播的video游戏来说,这是一个问题,或者是对等networking (而不是服务器 – 客户端),这依赖于所有客户端在每次运行程序时产生完全相同的结果 – 一个小的差异浮点计算可能会导致不同机器上的游戏状态(甚至是在同一台机器上 ) 即使在“遵循” IEEE-754的处理器之间也会发生这种情况,主要是因为某些处理器(即x86)使用了双精度扩展 。 也就是说,他们使用80位寄存器来执行所有计算,然后截断为64位或32位,从而导致与使用64位或32位进行计算的机器不同的舍​​入结果。 我已经看到了这个问题的几个解决scheme在线,但所有的C + +,而不是C#: 使用_controlfp_s (Windows), _FPU_SETCW (Linux?)或fpsetprec (BSD)禁用双扩展精度模式(以便所有double计算使用IEEE-754 64位)。 总是使用相同的优化设置来运行相同的编译器,并要求所有用户具有相同的CPU架构(无跨平台播放)。 因为我的“编译器”实际上是JIT, 每次程序运行时可能会有不同的优化 ,所以我认为这是不可能的。 使用定点算术,并避免float和double 。 decimal可以用于这个目的,但会慢很多,并且没有一个System.Math库函数支持它。 那么, 这在C#中甚至是一个问题? 如果我只打算支持Windows(而不是Mono)呢? 如果是这样, 有没有办法强制我的程序以正常的双精度运行? 如果没有, 是否有任何库可以帮助保持浮点计算的一致性?

如何使用jQuery或Javascript将货币string转换为double?

我有一个文本框,将有一个货币string,然后我需要将该string转换为一个双重执行一些操作。 “$ 1,100.00” – > 1100.00 这需要发生在所有客户端。 我别无select,只能将货币string作为货币string作为input,但需要将其转换为双精度值以允许进行一些math运算。

在C#中使用语句嵌套

我正在做一个项目,并且必须比较两个文件,看看他们是否相互激动。 我的第一个草案之前,错误检查和validation了很多: DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory + "\\TestArea\\"); FileInfo[] files = di.GetFiles(filename + ".*"); FileInfo outputFile = files.Where(f => f.Extension == ".out").Single<FileInfo>(); FileInfo expectedFile = files.Where(f => f.Extension == ".exp").Single <FileInfo>(); using (StreamReader outFile = new StreamReader(outputFile.OpenRead())) { using (StreamReader expFile = new StreamReader(expectedFile.OpenRead())) { while (!(outFile.EndOfStream || expFile.EndOfStream)) { if (outFile.ReadLine() != expFile.ReadLine()) […]

如何在android中以编程方式启用/禁用蓝牙

大家好, 我想通过程序启用/禁用蓝牙..我有以下代码。 BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 但是这种代码在SDK 1.5中不起作用。我如何在SDK 1.5中做同样的事情?

JavaScript可以连接MySQL吗?

JavaScript可以连接MySQL吗? 如果是这样,怎么样?

如何在Java中正常处理SIGKILL信号

当程序收到终止信号时,如何处理清理? 例如,我连接了一个应用程序,希望任何第三方应用程序(我的应用程序)在注销时发送finish命令。 什么是最好的发言,当我的应用程序被kill -9了finish命令? 编辑1:kill -9不能被捕获。 谢谢你们纠正我 编辑2:我想这种情况下,当一个调用只是杀死,这是一样的CTRL-C

如何在mySQL中定义一个自定义的ORDER BY命令

在MySQL中,我如何定义一个自定义的sorting顺序。 试图解释我想要考虑这个表格: ID Language Text 0 ENU a 0 JPN b 0 DAN c 1 ENU d 1 JPN e 1 DAN f 2 etc… 这里我想返回按语言和升序IDsorting的所有行,这样Language = ENU先是JPN,最后是DAN。 结果应该是:a,d,b,e,c,f等 这甚至有可能吗?

为什么我可以使用私人types的汽车?

我有点惊讶,下面的代码编译和运行(vc2012&gcc4.7.2) class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; // Foo::Bar b = f.Baz(); // error auto b = f.Baz(); // ok std::cout << bi; } 这段代码编译正确吗? 为什么它是正确的? 为什么我可以使用autotypes,而我不能使用它的名称(如预期的)?

哪个是首选的:可为空<>。HasValue或Nullable <>!= null?

我总是使用(a) Nullable<>.HasValue因为我喜欢语义。 但是,最近我正在使用别人现有的代码库(b) Nullable<> != null 。 是有理由相互使用,还是纯粹偏好? (一个) int? a; if (a.HasValue) … (b)中 int? b; if (b != null) …

导入库如何工作? 细节?

我知道这可能是非常基本的怪才。 但是我想把它弄清楚。 当我想要使用Win32 DLL时,通常我只是调用LoadLibrary()和GetProcAdderss()之类的API。 但是最近,我正在用DirectX9开发,我需要添加d3d9.lib , d3dx9.lib等文件。 我已经听够了,LIB是用于静态链接的,DLL是用于dynamic链接的。 所以我目前的理解是,LIB包含方法的实现,并在链接时作为最终EXE文件的一部分静态链接。 DLL是在运行时dynamic加载的,不是最终EXE文件的一部分。 但是有时候,DLL文件会附带一些LIB文件,所以: 这些LIB文件是什么? 他们如何达到他们的目的? 有没有什么工具可以让我检查这些LIB文件的内部? 更新1 检查维基百科后,我记得这些LIB文件被称为导入库 。 但我想知道它是如何与我的主要应用程序和DLLdynamic加载。 更新2 就像RBerteig所说的那样,DLL中生成的LIB文件中有一些存根代码。 所以调用顺序应该是这样的: 我的主要应用程序 – >存根在LIB – >真正的目标DLL 那么这些LIB应该包含哪些信息呢? 我可以想到以下几点: LIB文件应该包含相应DLL的完整path; 所以DLL可以被运行时加载。 每个DLL导出方法入口点的相对地址(或文件偏移量?)应编码到存根中; 因此,可以进行正确的跳转/方法调用。 我对吗? 还有更多吗? 顺便说一句:有什么工具可以检查导入库吗? 如果我能看到它,就不会有任何怀疑。