Tag: floating point

检查浮点变量是否为整数的最可靠方法是什么?

我可以想到几种方法,例如。 Convert.ToInt32(floatingPoint) – floatingPoint == 0; Math.Truncate(floatingPoint) – floatingPoint == 0; floatingPoint % 1 == 0; Math.Floor(floatingPoint) == floatingPoint; //etc… 但哪种方法最可靠?

如何检查双精度是否适合浮动而不转换为无穷大

有没有一种标准方法可以检查64位浮点数是否可以转换为32位浮点数而不转换为+/-无穷大? 我知道之后可以检查+/- Inf。 Convert.ToSingle()不会这样做。

为什么微软希望不用NaN修复错误的Equals和GetHashCode实现?

在.NET Framework中,浮点类型( System.Double和System.Single )的Equals(object)和GetHashCode()的实现( override )是错误的 。 引用MSDN GetHashCode(object)规范 : 哈希函数必须具有以下属性: •如果两个对象比较相等,则每个对象的GetHashCode方法必须返回相同的值。 但是,如果两个对象的比较不相等,则两个对象的GetHashCode方法不必返回不同的值。 如果您使用不同的二进制表示forms获取两个NaN值,则两个对象在Equals方法下的比较相等,但哈希码(几乎总是)是不同的。 现在,Microsoft Connect 已报告此错误。 但他们为什么不解决这个问题? 修复很容易:要么让不同的NaN 不相等,要么选择一个固定的哈希码来返回任何NaN 。 修复不会破坏任何东西:今天的事情,当使用不同的NaN时,没有任何作用。 你能想出任何不解决这个问题的理由吗? 这是一个说明当前行为的简单示例: using System; using System.Collections.Generic; using System.Linq; static class Program { const int setSize = 1000000; // change to higher value if you want to waste even more memory const double oneNaNToRuleThemAll […]

如何通过浮点表示将float转换为uint?

在C我将这样做以将数字的浮点表示转换为DWORD。 从地址中获取值并将内容转换为DWORD。 dwordVal = *(DWORD*)&floatVal; 所以例如44.54321将变为0x42322C3F 。 我怎样才能在C#做同样的事情?

浮点精度

我有一个用C#编写的程序,有些部分是用本机C / C ++编写的。 我使用双精度计算某些值,有时结果是错误的,因为精度太小。 经过一番调查后,我发现有人将浮点精度设置为24位。 当我将精度重置为至少53位(使用_fpreset或_controlfp)时,我的代码工作正常,但我仍然需要弄清楚谁负责将精度设置为24位。 我能做到这一点的任何想法?