【问题标题】:convert.toByte rounds float numberconvert.toByte 舍入浮点数
【发布时间】:2016-09-30 08:44:06
【问题描述】:

我正在编写一个适用于大型矩阵的程序。由于内存不足,我将矩阵定义为byte[]。内存不足的问题解决了,但是现在当我想给矩阵的元素赋值时,它告诉我浮点值不能转换为字节(元素的值是浮点数)。因此,我使用Convert.ToByte 将浮点值转换为字节。问题是它四舍五入浮点值,我不想要它。有没有我可以使用的函数并且它不会对浮点数进行四舍五入? 部分代码如下:

static byte[,,] Score = new byte[1501,1501,501];
Score[i, j, att] = Convert.ToByte(2.0 *(Math.Log(calNum())));

其中calnum 是一个计算浮点数的函数

【问题讨论】:

  • 我认为那里缺少一些东西...如果您需要存储 X 浮点数,则不能使用 X 字节数组。如果你使用的是一个 4X 字节的数组,为什么不将它定义为一个 X 浮点数的数组呢?
  • 因为我在运行程序时会面临内存不足的问题,所以我无法将矩阵定义为浮点数。所以,我把它定义为 byte[]
  • 如果有任何方法可以使用byte 来表示具有相同精度的float,那么编程语言已经在使用该技术而不是浪费这么多内存,不会'他们吗?将数组分区成块,一个块保存在内存中,其他块存储在磁盘中,甚至使用数据库来存储数组。
  • @AakashM 不要仅仅因为他们是初学者或无能而同情-upvote某人的问题。这个问题不清楚,也没有重现问题,这足以让我们投反对票。
  • 所以...因为您没有足够的 RAM 将值存储在浮点数中,所以您将它们转换为字节并想知道其余数据去了哪里?

标签: c#


【解决方案1】:

这在技术上是不可能的。更多信息请看这里:https://en.wikipedia.org/wiki/Double-precision_floating-point_format

这实际上是可能的,但是,如果您想以较低的精度存储从 -5 到 5 之类的数字。

如果您使用数学,您可能需要查看稀疏矩阵的方向。 该矩阵将优化其内部表示,减少内存影响。

【讨论】:

  • 是的,你是对的。但是,处理稀疏矩阵非常困难
  • 哪方面难?
【解决方案2】:

您是否尝试过使用小数而不是浮点数。根据您尝试使用的小数位数,float 可能会尝试四舍五入,甚至可能给出不可靠的结果。请在下面的链接中进一步阅读以了解浮点数、双精度和小数之间的区别。希望对您有所帮助。

Difference between decimal float and double in net

【讨论】:

  • 不,我应该为矩阵的元素分配浮点数,因为我将矩阵定义为字节[],它不能将浮点数转换为字节。所以,我用 convert.tobyte() 来转换浮点数。浮点数是自动计算的
  • 如果他使用十进制,他将陷入更大的内存问题。
猜你喜欢
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多