c# - 用浮点/双精度表示非常大的数字
问题描述
我想在应用程序(增量游戏)中显示非常大的数字。指数可以大于 100,000(十万),因此double
或float
将满足它们的限制。我知道BigInteger
类型,但我读到它可能很慢,而且我不需要超过 5 位的有效位精度,所以它可能不是一个好的选择
一个数字的示例可以是 1.2345*10^100000。在这种情况下,我不关心第 5 位之后的任何小数(5-15 位精度之间的任何地方都可以)
我需要在 30 毫秒的循环中对数字执行多项操作(乘法、加法、幂、对数),所以它应该很快。我怎样才能以一种好的方式做到这一点?是否有任何图书馆或者我需要自己制作?
如果我可以用不同的符号表示数字,例如科学、工程、字母、标准(百万、十亿、...、septillion、octillion、nonillion)等,那也很棒。
解决方案
我不知道是否已经有一个库,但是您可以尝试为 LargeNumbers 编写自己的类:
class LargeNumber
{
double Value;
int Mantissa;
}
然后你可以覆盖加法、乘法运算符等。
当然你必须在那里做一些数学运算
编辑: 是的,你必须知道指数是如何工作的,这不是微不足道的,但也不是太难。
加法运算的一些数学示例,在以下情况下:
firstNumber.Mantissa> secondNumber.Mantissa> 0:
...
var expDifference = firstNumber.Mantissa - secondNumber.Mantissa;
if(expDifference > 5)
{
return firstNumber;
}
if(expDifference < 5)
{
return new LargeNumber
{
Value = firstNumber.Value*(10^expDifference) + secondNumber.Value,
Mantissa= firstNumber.Mantissa
}
}
...
推荐阅读
- android - 将时间戳转换为星期几android
- ios - Google OAuth 提示在 Ionic IOS 应用上显示为“prompt-none”
- html - CSS 相对位置,推送元素
- python - Tensorflow-text: NotFoundError: _text_similarity_metric_ops.so not found
- javascript - 为什么我的 Tampermonkey 脚本没有删除 html 元素的样式
- html - 为什么谷歌浏览器支持 URL 末尾的 @
- gpu - 如何知道机器使用的是哪个 GPU?
- ruby-on-rails - Rails action_dispatch cookie 和 flash_hash 可能不一致
- uiimageview - iOS 14.5 为什么 UIImageView 拒绝渲染从 CIImage 创建的 UIImage?
- python - 在单行中汇总多个值