C# 是否可以通过计算手动提高双精度位字符串的精度

C# 是否可以通过计算手动提高双精度位字符串的精度,c#,math,floating-point,double,precision,C#,Math,Floating Point,Double,Precision,为了从十进制值创建浮点数,我们需要有符号位、指数和尾数 双精度使用11个指数位和52个尾数位 假设我们要存储0.3。我们可以通过执行以下操作找到尾数: 0.3 * 2 = 0.6 => 0 0.6 * 2 = 1.2 => 1 0.2 * 2 = 0.4 => 0 0.4 * 2 = 0.8 => 0 0.8 * 2 = 1.6 => 1 0.6 * 2 = 1.2 => 1 ... Answer: 01001100110011... 在C#中,我可以使用以

为了从十进制值创建浮点数,我们需要有符号位、指数和尾数

双精度使用11个指数位和52个尾数位

假设我们要存储0.3。我们可以通过执行以下操作找到尾数:

0.3 * 2 = 0.6 => 0
0.6 * 2 = 1.2 => 1
0.2 * 2 = 0.4 => 0
0.4 * 2 = 0.8 => 0
0.8 * 2 = 1.6 => 1
0.6 * 2 = 1.2 => 1
...
Answer:
01001100110011...
在C#中,我可以使用以下代码执行此操作:

双值=0.3;
StringBuilder位字符串=新的StringBuilder();
对于(int i=0;i<53;i++)
{
数值*=2;
如果(值>=1)
{
追加(“1”);
价值--;
}
其他的
{
追加(“0”);
}
}
  • 是否可以从双精度中提取现有尾数,然后继续此过程以查找更多位?我知道这对某些值不起作用,但是如果我有一个像0.123这样的精确数字,并且我知道所有剩余的数字都是0呢。1230000000
  • 我上面的代码似乎有问题。因为我使用双精度乘法,所以我只有15-17位精度。在乘以2的情况下,可能会稍微偏离我可以准确存储的位数。是否不需要像System.Decimal这样更大的类型就可以解决这个问题

  • 这里的目标是得到一个位字符串,该字符串包含超过53位的有效数据。

    您想要
    十进制
    精度,但不想使用
    十进制
    ?老实说,这很奇怪。@Aybe我想要一个任意精度的字符串。Decimal会给我96位的精度,但是如果我想要128位,或者256位呢?在网上搜索
    c#任意精度的Decimal
    ,你会发现很多实现。你想要
    Decimal
    精度,但不想使用
    Decimal
    ?老实说,这很奇怪。@Aybe我想要一个任意精度的字符串。十进制会给我96位的精度,但如果我想要128或256位呢?在web上搜索
    c#任意精度十进制
    ,你会发现相当多的实现。