小编Mul*_*deR的帖子

什么是将双精度值舍入到(稍微)更低精度的好方法?

我的问题是我必须使用一个thrid-party函数/算法,它将一个double -precision值数组作为输入,但显然可能对输入数据中的非常小的变化敏感.但是对于我的应用程序,我必须获得相同的结果(几乎)相同的输入!特别是我有两个测试输入数组,它们在小数点后的第5个位置是相同的,但我仍然得到不同的结果.那么导致"问题"的原因必须是小数点后的第5个位置之后.

现在我的想法是将输入四舍五入到稍低的精度,以便从非常相似的输入获得相同的结果,但不是 100%相同.因此,我正在寻找一种好的/有效的方法来将精度值舍入到稍低的精度.到目前为止,我使用此代码舍入到小数点后的第9个位置:

double x = original_input();
x = double(qRound(x * 1000000000.0)) / 1000000000.0;
Run Code Online (Sandbox Code Playgroud)

这里qRound()是Qt的正常的double到整数舍入函数.这段代码有效,它确实通过两个"有问题"的测试集解决了我的问题.但是:有更有效的方法吗?

还有什么困扰我:对于-100.0到100.0范围内的输入数据,舍入到小数点后的第9个位置可能是合理的(就像我当前的输入数据一样).但是,例如,对于-0.001到0.001范围内的输入数据,可能太多(即,太多精度损失).不幸的是,我不知道在其他情况下我的输入值会在什么范围内......

毕竟,我认为我需要的是一个函数,它执行以下操作:通过适当的舍入,将给定的精度值X切换到小数点后的最多LN位置,其中L是位置数在double -precision可以存储(表示)给定值的小数点之后; 和N是固定的,就像3.这意味着对于"小"值,我们将允许小数点后的位置比"大"值更多.换句话说,我想将64位浮点值舍入到(稍微)更小的精度,如60位或56位,然后将其存储回64位双精度值.

你能理解这个吗?如果是这样,你能否建议一种在C++中有效地做到这一点的方法???

提前致谢!

c++ rounding floating-point-precision

7
推荐指数
1
解决办法
3529
查看次数

VS2017并在Win7/XP上缺少"api-ms-win-core-rtlsupport-l1-2-0.dll"

将我的一些程序从VS2015移植到VS2017之后注意到二进制文件不再在Windows 7或Windows XP上运行 - 即使它们已经使用v141_xp工具集编译.该程序无法启动丢失的DLL api-ms-win-core-rtlsupport-l1-2-0.dll(注意2).

我很清楚那些api-ms-win-*DLL属于UCRT,从VS2015开始,我必须从Windows 10 SDK(可Redist\ucrt\DLLs在Windows 10 SDK目录中找到)重新分发UCRT DLL ,以及我的应用程序 - 只需重新分配vcruntime140.dllmsvcp140.dll足够的.但只有api-ms-win-core-rtlsupport-l1-1-0.dll在我的Windows SDK目录中,但没有 api-ms-win-core-rtlsupport-l1-2-0.dll.我刚刚下载并重新安装了最新的Windows SDK(10.0.15063).仍然没有相关的DLL!

我还尝试通过VC_redist.x86.exe从Visual Studio网站(14.11.25325)下载的最新版本在Windows 7(或XP)机器上安装VS2017 Redistributable软件包.显然,将api-ms-win-*DLL 复制到"System32"目录中.但是,只是api-ms-win-core-rtlsupport-l1-1-0.dll,但不是 api-ms-win-core-rtlsupport-l1-2-0.dll.应用仍然无法启动: - /

有任何想法吗?

谢谢和最诚挚的问候,
MuldeR

在此输入图像描述

在此输入图像描述


[编辑]

这当然只适用于我链接DLL运行时(/MD).如果我链接到"静态"运行时(/MT)我得到一个二进制文件,在UCRT 上没有 DLL依赖,并在Windows 7和XP上运行正常.


[编辑#2]

请参考我的其他帖子(包括EDIT)来解决这个问题:https:
//stackoverflow.com/a/45773325/1766377

c++ windows-xp visual-studio windows-7 visual-studio-2017

7
推荐指数
1
解决办法
9572
查看次数

NamedPipeServerStream无法在Windows 10上运行(适用于Windows 7)

看来,NamedPipeServerStream工作在Windows 10.

我正在使用以下代码从我的C#应用​​程序创建命名管道.此代码已直接从MSDN示例中复制,因此应该是正确的,我想:

class Program
{
    static void Main(string[] args)
    {
        using (NamedPipeServerStream pipeServer =
                new NamedPipeServerStream("testpipe", PipeDirection.Out))
        {
            Console.WriteLine("NamedPipeServerStream object created.");
            Console.Write("Waiting for client connection... ");
            pipeServer.WaitForConnection();
            Console.WriteLine("Client connected.");
            try
            {
                using (StreamWriter sw = new StreamWriter(pipeServer))
                {
                    sw.AutoFlush = true;
                    sw.WriteLine("Hallo world!");
                    Console.WriteLine("Data was written.");
                }
            }
            catch (IOException e)
            {
                Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message);
            }
            Console.WriteLine("Pipe closed.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行此程序,管道将成功创建.但是,在Windows 10上,每次尝试从终端中的管道读取都会立即失败,并显示错误"所有管道实例都很忙":

Microsoft Windows [Version …
Run Code Online (Sandbox Code Playgroud)

c# ipc pipe windows-10

7
推荐指数
1
解决办法
724
查看次数