Tag:

我疯了还是Math.Pow坏了?

我从这里使用了基本转换器并将其更改为使用ulong值,但是当转换大数字时,特别是高于16677181699666568的数字时,它返回的值不正确。 我开始研究这个并发现Math.Pow(3,34)返回值16677181699666568,而实际上3 ^ 34是16677181699666569.这因此为我投入了一个扳手。 我认为这只是Pow方法中双精度问题? 我最简单的解决方法就是创建我自己的Pow,它需要ulong值吗? 如果是这样,做Pow的最快方法是什么? 我假设每次都有一个比for循环更快的东西。

c#:两个双数字的总和问题

可能重复: 为什么C#中的浮点运算不精确? 你好。 我有以下问题: 43.65+61.11=104.75999999999999 对于十进制是正确的: (decimal)43.65+(decimal)61.11=104.76 为什么双重结果是错误的?

C#将字符串转换为double / decimal并返回字符串,保留尾随零,为数千添加coma

我试图获取用户输入,解析它然后用String.Format()显示,用comas格式化数千。 So, if user provides 1000 I will display 1,000 1000.00 => 1,000.00 1000.0 => 1,000.0 1,000.5 => 1,000.5 基本上我想保留所提供的所有小数(包括尾随零),只需添加数千的格式。 我试过了: String.Format(“{0:#,0.######}” , Decimal.Parse(input)); String.Format(“{0:#,0.######}” , Double.Parse(input);

C#的任何等效“扩展”?

我正在研究我的Mandelbrot屏幕保护程序的新版本,并且我的浮点精确度已经不足了 – 简单的双值没有足够的重要数据来满足我的需求。 更重要的数字=更大程度的放大分形 回到我在Delphi 7中编写这个屏幕保护程序的版本时,我使用了80位大小的扩展浮点类型。 在.NET中,我可以切换到十进制 ,但是这对性能的影响非常糟糕,分形生成速度减慢了20倍左右。 是否有任何相当于.NET的扩展 ? 或者,是否有任何数字类型的精度高于double仍然使用FPU进行评估,因此不具有十进制的高性能命中? 更新 我的屏幕保护程序已经设法缩放许多(很多!)数量级的分形; 目前,只有当使用的数字类型无法分隔相邻像素的纵坐标时,它才会重置为基础分形。 从双倍扩展的改进中额外的16位精度将使我接近16倍的大小倍增。 至于性能,我的算法已经设法消除了所需数学的95-99%(与计算许多像素的简单实现相比),同时保留了分形的完整性。

C#中浮点数和双数据类型的实际范围是多少?

我正在学习C#并尝试在C#中获得实际数据类型范围的逻辑直观表示。 我已经移动了整数,现在我浮动和双数据类型。 8位(1字节),sbyte,-128到127。 8位(1字节),字节,0到255。 16位(2字节),短,-32,768到32,767。 16位(2字节),ushort,0到65535。 32位(4字节),int,-2,147,483,648到2,147,483,647。 32位(4字节),uint,0到4,294,967,295。 64位(8字节),长,-9,223,372,036,854,775,808到9,223,372,036,854,775,807 64位(8字节),ulong,0到18,446,744,073,709,551,615。 以下是msdn中float和double数据类型大小的引用: Float: http : //msdn.microsoft.com/en-us/library/b1e65aza( v= vs.110).aspx 双倍: http : //msdn.microsoft.com/en-us/library/678hzkk9.aspx 因此,试图遵循上面编号列表中指定实际数字范围的惯例,这两个范围实际代表什么?

为什么Convert.ToDecimal(Double)轮到15位有效数字?

我有一个小数点后的17位数的double ,即: double myDouble = 0.12345678901234567; 如果我将此转换为decimal如下所示: decimal myDecimal = Convert.ToDecimal(myDouble); 然后myDecimal的值根据Convert.ToDecimal文档舍入为15位数(即0.0123456789012345 )。 我的问题是,为什么要进行这种舍入? 我明白,如果我的原始数字可以在10号基础上准确表示,并且我试图将其存储为double ,那么我们只能对前15位数有信心。 最后两位数将受到舍入误差的影响。 但是,这是一个基础10偏见的观点。 我的数字可能更准确地用double精度表示,我希望将其转换为decimal同时尽可能保持准确性。 不应该Convert.ToDecimal旨在最小化myDouble和(double)Convert.ToDecimal(myDouble)之间的差异?

如何处理大多数小数部分无法用二进制精确表示的事实?

因此,我们知道诸如0.1之类的分数无法在二进制基数中准确表示,这会导致精确的问题(例如此处提到的: 格式化C#中输出的双精度数 )。 我们知道数字的十进制表示有十进制类型…但问题是,很多数学方法,不支持十进制类型,所以我们将它们转换为double,这再次破坏了数字。 那我们该怎么办?

Visual Studio在调试期间如何显示System.Double?

尝试调试以下简单程序,并在每个步骤中将鼠标hover在x上(或者为x或其他任何内容添加“添加监视”)。 using System; using System.Globalization; static class Program { static double x; static void Main() { x = 2d; // now debugger shows “2.0”, as if it has used // x.ToString(“F1”, CultureInfo.InvariantCulture) x = 8.0 / 7.0; // now debugger shows “1.1428571428571428”, as if it had used // x.ToString(“R”, CultureInfo.InvariantCulture) // Note that 17 significant […]

反序列化为double时,JsonConvert会抛出一个“非有效整数”exception

当我尝试从JSON字符串反序列化为对象时,我得到一个exception。 Input string ‘46.605’ is not a valid integer. Path ‘LatitudeCenter’ 这真的很奇怪,因为JsonConvert尝试将属性反序列化为整数,但它实际上是一个double而不是整数 。 我已经检查了我的Web API项目。 我的类中的属性是web项目中的double和same。 我在web asp项目中使用的代码: using (var client = new HttpClient()) { client.BaseAddress = new Uri(“myWebApiHostedUrl”); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); // Get the response HttpResponseMessage response = await client.GetAsync(“api/NewMap/?SouthLatitude=46.600&WestLongitude=7.085&NorthLatitude=46.610&EastLongitude=7.095&Width=900&Height=900&isVoxelMap=true”); string jsonData = response.Content.ReadAsStringAsync().Result; //Exception here NewMap dataMewMap = JsonConvert.DeserializeObject(jsonData, new JsonSerializerSettings() { Culture […]

将Decimal数组转换为Double数组

什么是将decimal[]转换为double[]的有效且有希望优雅的咒语? 我正在使用一些相当大的数组。