【问题标题】:How to generate double numbers in c# [closed]如何在c#中生成双数[关闭]
【发布时间】:2017-07-17 21:22:24
【问题描述】:

谢谢大家,我得到了数字库,但我仍然有问题。 下面的代码只能生成从 0.000000000000000000000000000001 到 0.999999999999999999999999999999 的所有数字 ,但我需要从 0.009999999999999999999999999999 到 0.099999999999999999999999999999 的所有数字。 所以我修改了它并知道它卡在 0.01 上,所以每次循环时它在文件中的打印只有 0.01,而且它没有变大! BENDER BENDING请帮忙!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace double_generator
{
class Program
{
    static void Main()
    {
        try
        {
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\xexex\Desktop\green.txt"))
            {
                double number = 0.009999999999999999999999999999;

                do
                {
                    number += 0.000000000000000000000000000001;
                    file.WriteLine(number.ToString("N30"));
                } while (number <= 0.099999999999999999999999999999);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
}

}

【问题讨论】:

  • 我需要将它们全部保存在 txt 文件或 cmd 中。从 0.000000000000000000000000000001 到 0.9999999999999999999999999999999 的所有数字。
  • 那么,javascript 还是 c#?请不要发送不相关的标签。
  • 这么大的文件不可能存在!那里有大约10**30 号码。例如,如果每个数字占用 30 个字节,那将是 3 * 10**31(又名 3e31)字节。没有任何系统可以容纳这么大的文件。
  • 该死的@JeppeStigNielsen。你比我快 2 秒!
  • 我投票结束这个问题,因为它是一个零努力的需求转储。

标签: c# dictionary numbers double


【解决方案1】:

如何通过在 for 循环中一次添加 0.000000000000000000000000000001 来生成每个数字,当数字等于 0.9999999999999999999999999999999 时结束。

在每次迭代中将其转换为字符串并将其写入文件

【讨论】:

  • 我可能误解了你的要求,你想生成每个双精度数还是只生成一个介于 0 和 1 之间的随机双精度数?
  • 我删除了我的,我很确定他的意思是每个人。这意味着您的方法应该可以正常工作
  • 我认为他想要一个随机数生成器。编辑:只需阅读他的评论,nvm。
  • 我需要生成每一个双数。
  • 这需要几百万年的时间!
【解决方案2】:

警告:生成的文件为 33 GB!文件太大,根本打不开。

try
{
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\user_pc\Desktop\test.txt"))
    {
        double number = 0;
        do
        {
            number += 0.000000000000000000000000000001;
            file.WriteLine(number.ToString("N30"));
        } while (number <= 0.999999999999999999999999999999);
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString());
}

【讨论】:

  • double 没有足够的精度。在接近最终目标之前,您将达到number += 0.000000000000000000000000000001 不再更改number 的某个点。但当然,文件系统会在此之前放弃。
  • 那应该是float吗? @JeppeStigNielsen
  • 其实我连小数点后 15 点都做不到。
  • 不,float 会更糟。
  • 顺便说一句:写那个文件需要好几个世纪。
猜你喜欢
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 2014-03-17
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
相关资源
最近更新 更多