floating-point相关内容

查找最小/最大一个浮点/双精度具有相同的内部重新presentation的

刷新上浮点(也的 免责声明:这个讨论,我很喜欢所描述的IEEE-754坚持为32位和64位浮点。我不感兴趣的扩展浮点数(80位)或四边形(128位IEEE-754-2008)或任何其他标​​准(IEEE-854)。 背景:电脑是在二重presentation重新presenting 0.1 坏。在C#中,一个浮重presents这是 3DCCCCCD 内部(C#使用舍入到最接近的)和双象 3FB ..
发布时间:2015-11-25 12:57:53 C#/.NET

添加两个双给出错误的结果

我用下面这段加法的结果code,在一些神秘的情况下,是不是因为它应该是: 双_west = 9.482935905456543; 双_off = 0.00000093248155508263153; 双_lon = _west + _off; //检查预期的结果 Debug.Assert的(_lon == 9.4829368379380981); //有时我9.48293685913086为_ ..
发布时间:2015-11-24 22:48:04 C#/.NET

它是正确的来比较两个圆形的使用==操作符浮点数?

还是有机会的操作会失败? 感谢。 我选择了错误的期限和我真正的意思是四舍五入为0,而不是被截断。 的一点是,我需要的两个双打的整数部分比较,我只是他们铸造成int,然后用==,但是,正如有人指出的,在我前面的问题之一,这可能会引发溢出异常,如果双重不能融入整数。 所以现在的问题是“是否正确使用==操作符来比较两个双打有previously被四舍五入为0,或者我应该坚持铸造为int的方法和捕 ..
发布时间:2015-11-24 22:33:48 C#/.NET

什么是重新在Protocol Buffers的present System.Decimal最好的方法是什么?

从解决方案 那么,protobuf网将简单地处理这个问题你;它运行了类型的特性,并具有十进制的全力支持。由于是在原EX pressing 十进制没有直接的方法,它不会(目前)生成一个十进制从“.proto”文件属性,但是这将是一个不错的好办法来识别一些常见的类型(“BCL.Decimal”或类似的),跨preT它是十进制数。 至于再presenting它 - 我有一个讨论文件在这个(现在已经过 ..
发布时间:2015-11-24 22:10:29 C#/.NET

在.NET的Double.ToString法圆两次错误

在数学上,考虑这个问题的有理数 2分之8725724278030350** 48 其中, ** 分母表示幂,也就是分母是 2 到 48 次方。 (分数不是最简,还原由2)这个数字是完全再presentable为 System.Double 。它的十进制扩展为 31.0000000000000'49'73799150320701301097869873046875(精确) 其中 ..
发布时间:2015-11-24 21:25:52 C#/.NET

解析字符串浮点数C#

我在字符串浮点数。有一个问题。多种用途“。”没有“,”作为小数点。 这code不工作: 为mynumber = float.Parse(“123.5”); 我知道,我可以使用字符串替换函数来“修理”这个字符串之前解析。 '。'为mynumber = float.Parse(“123.5”.Replace(''); 但是否有任何其他方式做到这一点? 解决方案 要添加到史蒂芬 ..
发布时间:2015-11-24 20:18:42 C#/.NET

如何转换float数组以一个byte []和回?

我有花车的数组需要转换为字节数组,并返回一个float [] ...谁能帮我正确地做到这一点? 我的工作与bitConverter类,发现自己卡住试图追加的结果。 我这样做的原因是这样我就可以节省运行时间值转换为IO流。目标存储天青页斑点的情况下,重要的事情。我不关心什么尾数,这是储存在,只要输入输出相匹配。 静态的byte [] ConvertFloatToByteArray(浮动[]花车 ..
发布时间:2015-11-24 16:12:07 C#/.NET

计算单元的最后的地方(ULP)双打

.NET是否有一个内置的方法来计算一个给定的双倍 ULP 或浮? 如果没有,什么是最有效的方法,这样做? 解决方案 看来功能是pretty的琐碎;这是基于伪code在接受的答案被vulkanino链接的问题: 双值=什么; 长位= BitConverter.DoubleToInt64Bits(值); 双nextValue = BitConverter.Int64BitsToDouble(位 ..
发布时间:2015-11-24 15:50:11 C#/.NET

CLR JIT优化违反了因果关系?

我在写一个启发性的例子的一个同事告诉他为什么测试浮相等往往是一个坏主意。我去的例子是添加.1十次,比对1.0(一个我一直在我的入门级数字显示)。我很惊讶地发现,这两个结果的都是平等的的( code +输出) 浮法@float = 0.0; 为(中间体@int = 0; @int小于10; @int + = 1) { @float + = 0.1F; } Console.WriteLine ..
发布时间:2015-11-24 15:48:44 C#/.NET

C#得到浮点型变量的数字

我有一个浮动的变量,并想在逗号后只得到了一部分,所以如果我有3.14。我想获得14为整数。我该怎么办呢? 解决方案 的作弊方式来做到这一点是: 私人的Int32 FractionalPart(双N) { 字符串s = n.ToString(“##########”,System.Globalization.CultureInfo.InvariantCulture); ..
发布时间:2015-11-24 15:45:24 C#/.NET

我怎样才能测试负零?

起初我还以为 Math.Sign 将是正确的路要走,但在运行测试后,它似乎把 -0.0 和 +0.0 相同。 解决方案 下面是这样做的难看黑客攻击的方式: 私有静态只读长NegativeZeroBits = BitConverter.DoubleToInt64Bits(-0.0); 公共静态布尔IsNegativeZero(双X) { 返回BitConverter.Doub ..
发布时间:2015-11-24 15:29:18 C#/.NET

微软ACE驾驶员改变浮点precision我在程序的其他部分

我有一个问题,似乎有些计算结果改变已经使用的微软ACE驾驶员打开一个Excel US preadsheet。 在code初级讲座重现问题。 前两个调用 DoCalculation 产生相同的结果。然后,我调用函数打开preadSheet 打开和关闭使用ACE驱动的Excel 2003小号preadsheet。你不会想到打开preadSheet 有在最后调用 DoCalculation 任何影响 ..
发布时间:2015-11-24 15:09:02 C#/.NET

在.NET中,我该如何选择一个小数和双之间

我们这个讨论一天的工作,我希望能有一个问题,#1我会点人所以这里去。) 在一个 双击 和当(在什么情况下),如果您的总是使用双击? 当(在什么情况下),如果您的总是使用十进制? 什么是驱动因素需要​​考虑的案件不属于两大阵营之一以上? 有很多重叠这个问题的问题,但他们往往会问:什么人应该做在一个给定的情况下,而不是如何决定在一般情况下。 解决方案 我经常思考的自然的VS的人工的数量。 自 ..
发布时间:2015-11-24 14:56:18 C#/.NET

胁迫浮点是确定性的。NET?

我已经读了很多有关浮点决定在.NET中,即确保同一code具有相同的输入会给在不同的机器相同的结果。由于.NET没有选择像Java的fpstrict和MSVC的FP:严格,的共识似乎中,有没有办法解决这个问题使用纯管理code。 C#的游戏AI战争已经决定使用定点运算代替,但是这是一个麻烦的解决方案。 的主要问题似乎是在CLR允许中间结果住在FPU寄存器具有更高precision比类型的天然pr ..
发布时间:2015-11-24 14:50:46 C#/.NET

比较浮点值

我刚刚看了一个关于浮点值比较报表 浮动无论使用==或点值不能拿来比较!= 运营商。 大多数浮点值没有确切的二进制重新presentation并有 有限的precision。 如果那么什么是用于比较两个浮点值的最佳方法是什么? 解决方案 下面的扩展方法可实现凯文的建议很有用: 公共静态布尔IsEqualTo(这双A,双B,双裕) { 返回Math.Abs​​(A - B)& ..
发布时间:2015-11-24 14:37:06 C#/.NET

浮点/双精度precision在调试/发行方式

做C#/。NET浮点运算的不同之处precision调试模式和发布模式之间? 解决方案 它们确实是不同的。根据CLR的ECMA规范: 存储浮点地点 数字(静态,数组元素,并 类字段)是固定的大小。 支持的存储大小 FLOAT32与float64。其他地方 (计算堆栈上,作为 参数,如返回类型,并作为 局部变量)浮点 使用数字重新presented 内部浮点类型。在每个 这样的实例中,标称 ..
发布时间:2015-11-24 14:35:16 C#/.NET

提取尾数和指数的双用C#

有没有简单的方法来获得在C#中(一般或.NET)的尾数和指数从双? 我发现这个例子使用谷歌,但我不知道这将是多么强大的是。莫非二进制重新presentation的双重变化框架将来的某个版本,等等? 我发现另一种方法是使用System.Decimal,而不是双并使用有什么建议? 解决方案 二进制格式不应该改变 - 这肯定会是一个重大更改现有的规范。它的定义是在IEEE754 / IEC 60 ..
发布时间:2015-11-24 13:52:10 C#/.NET

铸造结果漂浮在方法返回浮动变化导致

为什么这code打印假的.NET 4 ?似乎有些意外的行为,正在引起显式类型转换。 我想答案超越“浮点运算是不正确的”或“不这样做。” 浮起(浮X,浮动Y) { 返程(X * Y); } 浮动B(浮X,浮动Y) { 回报(浮)(X * Y); } 无效的主要() { Console.WriteLine(一(10F,1F / 10F)== B(10F,1F / 10F)); } ..
发布时间:2015-11-24 13:49:43 C#/.NET

截断十进制数不能四舍五入

可能重复: 我要截断小数像下面 即 2.22939393 - > 2.229 2.22977777 - > 2.229 解决方案 双D = 2.22977777; D =((双)((INT)(D * 1000.0)))/ 1000.0; 当然,这不会,如果你试图截断舍入误差的工作,但它应该正常工作与你给你的例子中的值。参见前两个答案这个问题的详细信息,为什么它不会有时工作。 ..
发布时间:2015-11-24 13:44:31 C#/.NET