小编far*_*ast的帖子

什么时候通过十进制从float转换为double是有益的

我们现有的应用程序从文件中读取一些浮点数.这些数字是由其他一些应用程序写的(我们称之为应用程序B).此文件的格式很久以前就已修复(我们无法更改).在此文件中,所有浮点数都以二进制表示形式保存为浮点数(文件中为4个字节).

在我们的程序中,一旦我们读取数据,我们就将浮点数转换为双精度数并使用双精度数进行所有计算,因为计算非常广泛,我们关注舍入误差的传播.

我们注意到,当我们通过十进制转换浮点数时(参见下面的代码),我们得到的结果比直接转换时更精确.注意:应用程序B也在内部使用双精度数,只将它们作为浮点数写入文件中.假设应用程序B将数字0.012写入文件为float.如果我们在读取到十进制后转换它然后加倍我们得到0.012,如果我们直接转换它,我们得到0.0120000001043081.

这可以在不读取文件的情况下重现 - 只需一个作业:

    float readFromFile = 0.012f;
    Console.WriteLine("Read from file: " + readFromFile); 
    //prints 0.012

    double forUse = readFromFile;
    Console.WriteLine("Converted to double directly: " + forUse);
    //prints 0.0120000001043081

    double forUse1 = (double)Convert.ToDecimal(readFromFile);
    Console.WriteLine("Converted to double via decimal: " + forUse1); 
    //prints 0.012
Run Code Online (Sandbox Code Playgroud)

通过十进制从float转换为double总是有益的,如果不是,在什么条件下它是有益的?

编辑:应用程序B可以通过两种方式获取它保存的值:

  1. 价值可以是计算的结果
  2. 值可以由用户输入为小数部分(因此在上面的示例中,用户在编辑框中键入0.012并将其转换为double,然后保存为float)

c# rounding

8
推荐指数
2
解决办法
962
查看次数

在多个线程上并行调用ICsharpCode.SharpZipLib是否安全

我们目前正在使用压缩ICsharpCode.SharpZipLib库的GZipOutputStream类.我们从一个线程做到这一点.

我想将输入数据流拆分为块并并行压缩它们.我担心这个库可能有一些静态内部将被多个线程覆盖,因此破坏了生成的流.

任何想法将不胜感激.

.net zip multithreading sharpziplib

4
推荐指数
2
解决办法
2841
查看次数

标签 统计

.net ×1

c# ×1

multithreading ×1

rounding ×1

sharpziplib ×1

zip ×1