小编Raj*_*hDA的帖子

std :: pow在32位和64位应用程序中产生不同的结果

我发现一些复杂计算的结果不匹配.当我彻底观察到中间结果时,它的std :: pow函数会产生不匹配.以下是输入/输出.

long double dvalue = 2.7182818284589998;
long double dexp = -0.21074699576017999;
long double result = std::powl( dvalue, dexp); 
Run Code Online (Sandbox Code Playgroud)

64位 - >结果= 0.80997896907296496和32位 - >结果= 0.80997896907296507

我正在使用VS2008.我已尝试过其他功能的pow功能,需要很长的双倍并返回长双,但仍然看到相同的差异.

double pow( double base, double exponent );

long double powl( long double base, long double exponent );

我已经阅读了一些关于此的信息:

Intel x86处理器内部使用80位扩展精度,而double通常是64位宽.不同的优化级别会影响来自CPU的浮点值保存到内存中的频率,从而将80位精度舍入为64位精度.或者,使用long double类型,通常在gcc上为80位宽,以避免从80位到64位精度的舍入.

有人能让我清楚地了解差异和克服这种差异的方法.

c++ x86-64 c++11

6
推荐指数
2
解决办法
1461
查看次数

WIX 安装程序:主要升级到新的安装目录

我们使用 WiX 来构建安装包。我是 WiX 技术的新手,目前正在尝试对已安装的应用程序进行重大升级,但目录位置与以前的版本不同。例如,如果产品的 v2 安装在 Program Files (x86)\Old_path\Product 上,我想将升级版本 v3 安装在不同的文件夹 C:\Program Files (x86)\New_path\Product 上。

我已修改 msi 属性 INSTALLDIR 以拥有新的位置路径。我们尝试更改InstallExecuteSequence,在InstallValidate之后添加RemoveRegistryValues以删除注册表上存储的旧路径,并执行WriteRegistryValues以添加新的注册表值。

<InstallExecuteSequence>
....
    <Custom Action="HxPrepare" Before="InstallValidate">NOT Installed</Custom>
    <RemoveRegistryValues After="InstallValidate" />
    <WriteRegistryValues />
   <Custom Action="HxFinalize" Before="StartServices">NOT Installed</Custom>
....
<InstallExecuteSequence />
Run Code Online (Sandbox Code Playgroud)

但我发现安装过程没有任何变化,新文件仅复制到旧目录路径。即使修改了 INSTALLDIR 路径后,我还能知道这个旧路径是从哪里获得的吗?我们如何在重大升级期间更改安装路径。

回复 PhilDW 的评论:

这是重大升级的正确过程。所有旧版本文件都将被删除。但是,在我们的应用程序中,升级期间没有浏览对话框来询问新的/所需的安装目录。它只需要以前版本的路径。这是因为首先我们需要备份较低版本的重要设置/用户配置文件,然后在升级版本中使用它们。保存此备份后,我尝试将此备份文件移动到新路径,然后开始复制新文件。我在 HxPrepare 步骤中将路径更改为 INSTALLDIR,并希望在新目录中继续该过程。但我不知道从哪里才考虑旧路。

<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
<Custom Action="PreventDowngrade" After="FindRelatedProducts">DOWNGRADE</Custom>
<Custom Action="HxInit" After="CostFinalize">NOT Installed</Custom>
<Custom Action="HxPrepare" Before="InstallValidate">NOT Installed</Custom>
<Custom Action="HxFinalize" Before="StartServices">NOT Installed</Custom>
<Custom Action="HxPreUninstall" Before="InstallValidate">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
<Custom Action="HxUninstall" After="InstallInitialize">(NOT UPGRADINGPRODUCTCODE) AND …
Run Code Online (Sandbox Code Playgroud)

installation windows-installer wix upgrade major-upgrade

5
推荐指数
0
解决办法
718
查看次数