我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:刘伯温论坛 > 分别编译 >

代码在x86与X64分别编译float类型运算结果不一致

归档日期:07-07       文本归类:分别编译      文章编辑:爱尚语录

  32位与64位(a+b)的结果一致,但32位在最后赋值时c的值与64位就不相同。

  当c=(double)a+b时,64位的运算结果与32位的运算结果(即c的值)一致,如果不添加double,如何解决?采用vs2008.

  首先根据数学法则,确定正确的值是什么。看你的程序本身有没有错误。误差很大就是程序本身错了。

  如果有极微小的误差,这很正常。就算都是x86代码,甚至完全一样的代码,也不能保证每次运算的值都100%一样。所以,不能用=比较浮点数,切记。要用两数相减绝对值小于一个极小的数的方法比较浮点数。

  那么X64和X86运行后 y 的值都为22.399996。为了与X86结果保持一致,否则经过大量误差累积后,

  所以要么修改代码,但工作量庞大;要么设置项目编译选项,但不了解设置什么,也不知道能否解决。

  如果想补充问题,请编辑问题;问题解决后请采纳答案;如果自己找到解决方案,也可以自问自答并采纳。

  抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

  x86架构下,一般通过专用协处理器计算浮点数。浮点数运算通过FPU(Float Point Unit,浮点运算单元计算)计算,提供了浮点栈寄存器st0~st7。nnfld mem  ;浮点数入栈nnfmul mem ;st(0)=st(0)*memnnfst mem ;st(0)转换为指定精度的浮点数nnfstp mem;同fst,并弹出st0nn另还 fdiv ,fsqrt,fist,fist...

  前言: 我先写一段测试代码来说明一下问题nnnn @Testn public void testCalculateScoreFloat(){n int fanScore = 14, flowers = 9, result = 0;n float bascScore = 500;n float[] basicPoint = {0f, 0.05...

  20161021版本的live555代码,使用vs2013的工程管理,可分别编译x86和x64,亲测可用,故分享。

  struct T {n char a;n int b;n char c;n}printf(%d\n, sizeof(struct T)); //x64 12 x86 12nprintf(%d\n, sizeof(long long)); //x64 8 x86 8nprintf(%d\n, sizeof(long)); //x64 8

  Java中两个float计算Java中两个float计算n问题的产生n原因n如何解决n使用Java的到浮点数的二进制n问题的产生今天同学问了我一个问题,给了一段代码,问运行结果: n n第一眼看上去感觉就是0.8啊,没毛病,可是要是这么简单的题怎么会问我呢,感觉是个陷阱啊,这时候想起来,浮点数的存储不是精确的,但是依然得不出答案,于是上IDE编译运行了一遍。 n n结果:0.79999995 n其实

  按照nn的方法,出现nnUnable to load Boost.Build: could not find boost-build.jamnn原因是nn要先设置到根目录:nnnn再进行后续操作即可。nn nn但是,这里设置时候:nn--prefix=D:\Install-Packag...

  在属性页中,配置属性---VC++目录---引用目录,库目录。把引用目录中的$(VC_ReferencesPath_x86),库目录中的$(VC_LibraryPath_x86) 和 $(WindowsSDK_LibraryPath_x86) 中的x86都改为x64。如下图所示。nn注意,要选择平台为x64位平台(同理,x86平台则把所有x64改为x86)。nn(PS:因为这个是我已经改过运行了,...

  一个简单的问题当我对两个int类型做除法(/)时,想输出一个相对精确的浮点数float类型的数据,于是一开始我用了这样的算法nint a=10;nint b=15;nfloat c=float(a/b);ncoutlt;lt;c;nn程序可以正常编译,但是结果却是0!n于是仔细看了看书,发现C++在进行运算时是这样工作的:nn对于两个同类型的,如float与float做除法运算。计算结果是fl...

  小弟近来实验室项目需要在调用OpenCV的函数,编译出现了如下问题:模块计算机类型“X64”与目标计算机类型“X86”冲突。nnnnnnnnn上网查找了许多博客网站,多数转载以下这篇博客和百度经验。n

  windows64位vs2013模块计算机类型X64与目标计算机类型“X86冲突解决方案

  最近在一家公司实习,关于人工智能货架的,由于项目里涉及到深度摄像头,需要对厂家给的摄像头samples里的源程序进行调试,里面涉及到cmake,由于之前没有接触过cmake,所以昨天才开始入门。rnrn这里我说一下,在我配置完成cmake之后,在cmd里执行命令及遇到的问题:rnrn首先在cmd执行输入文件命令:cd C:\Users\EDZ\Desktop\camera\samples\samp

  float和double浮点数的运算过程nnnn目录nn用 [TOC]来生成目录:nnnnfloat和double浮点数的运算过程nn目录nnn1. 浮点数在计算机底层的存储方式n 2. 十进制数与二进制浮点数之间的转换n 3. 加减运算n4. 总结nnnnnnn简介:本文以float为例,演示了浮点数在计算机底层的存储方式、浮点数10进制与2进制间的相互转换以及浮点数加减运算全过程nnnn1. ...

  参考文章:Java Float类型 减法运算时精度丢失问题rn今天参加面试,面试官问到一个问题,两个float相除怎么证明是否整除,我提出了几个方法,他提示我精度有可能会丢失,然后我就懵逼了,回来搜索了一下发现float和double都是用来科学计算的rnfloat和double的底层实现是二进制的。十进制中的一个有限位数小数,转换成二进制就不一定是有限位数了,一旦位数超过的float和doubl

  今天用C#计算10000个float数据求和结果与Excel比对居然相差五百多,网上查了半天,最后结果是将类型转换为decimal,问题最终解决。rn下面附上一些查到的东西rn1、float只有7位有效数字,decimal类型比float,double精度高  、关于数字类型字符串  

  OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

  OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112 n下面仅记录一下自己的修改过程。并不保证遇到相同问题的人能通过同样的方法解决该问题。不过可以试一试,大不了再改回来嘛!n参考文章:    n1、、h

  警告 LNK4272 库计算机类型“X86”与目标计算机类型“x64”冲突

  浮点型简单讲就是实数的意思。浮点数在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到;但用浮点数真的可以准确表示实数吗?让我们来研究研究吧。如下图代码所示,理论上我们输出的数字应该是4000,但结果确是4001.552979,这就说明float浮点数是存在误差的那么这些误差值是为何而来呢其实那是因为精度越来越高,占字节数...

  「模块计算机类型“X86”与目标计算机类型“x64”冲突」问题的解决办法:

  第一:右击项目-属性-链接器-高级-目标计算机 ,改为MachineX64 (/MACHINE:X64)。rn第二:导航栏处的 解决方案平台,下拉,选择X64,如果没有X64,则选择配置管理器,右上角的 活动解决方案平台选择新建,下拉选择X64,确定。rnrn我的配置是:OpneCV3.0 + VisualStudio2013rnrn第一步图解:rnrnrn第二步图解:rnrnrnrn两部

  模块计算机类型“X86”与目标计算机类型“X64”冲突的原因分析与解决方案

  这个问题的对立问题就是“模块计算机类型“X64”与目标计算机类型“X86”冲突”,这个问题的解决方法文章后面再说这两个问题看起来很像,解决方法却大相径庭,很多博客都把两者混淆,解决不了问题原因分析首先来看题目中这个问题出现的原因,模块计算机类型“X86”是指计算机当前调用的库(lib或dll文件)的位数是32位,目标计算机类型“X64”是指当前的编译平台环境为64位,两者不相符,故冲突模块计算机类...

  1.今天碰到了这个问题,我的构建套件(kit)有两个,一个是VS2013,一个是桌面,去掉桌面就可以了。2.qt包含路径有空格,增加$$quote()包含路径

  vs2010遇到 模块计算机类型“X86”与目标计算机类型“x64”冲突

  在win7 64位系统上运行一个opencv项目,结果出现如题所示的项目,网上有很多解决方法,找到了一个比较简单的解决了:rnrnrn简单的说原因就是我们加载的是64位的opencv的库,但是visual是使用X86的平台进行编译的所以有冲突。解决方法为:rnrn1、右键项目--属性--链接器--高级--目标计算机(在右边的窗口),将此处改为MachineX64 (/MACHINE:X64

  关于MYSQL编程使用VS2015编译报“LNK4272库计算机类型“X86”与目标计算机类型“x64”冲突”的解决办法

  【注意事项】rn1.下载MYSQL数据,最好是下载ZIP格式的包而不是MSI,因为仅需要用到其中两个文件夹,并不需要安装MySQL rn2.每次新建工程之后都要先配置MySQL开发环境rn【开始配置环境】rn1.新创建一个“win32控制台”项目rn2.把下载MYSQL包解压到本地,然后在解压出来的文件夹里面找到include文件夹和lib文件夹,将2个文件夹复制到项目路径中,eg:C:\User

  printf的一个异常现象引发的对x86-64体系下可变参数传参的探究

  测试环境nnnnclang version 3.8.1-24 (tags/RELEASE_381/final)nTarget: x86_64-pc-linux-gnunThread model: posixnnLinux version 4.9.0-deepin13-amd64 () (gcc version 6.3.0 20170321 (Debian 6.3.

  OpenCV 3.4.1+opencv_contrib+vc15+x86+x64

  win10系统下使用Visual Studio 2017编译的OpenCV 3.4.1,包含opencv_contrib,分别编译了x86和x64的Debug和Release版本

  在平时的使用过程中,发现使用float类型在进行计算的时候,有些数字在进行计算后,小数点后面的位数明显变多,并且最后一位不为零,和正常的计算结果产生了误差。首先看一下我的代码。nnn n n 求和n n n n n n n n function add(){n var a1 = document.getElementById(add1).value;n var

  glut32.lib : warning LNK4272: 库计算机类型“x86”与目标计算机类型“x64”冲突

  先说结论:使用的库是32位的而写的代码目标机器是64位的,所以报错产生冲突nnnn自己因为太蠢遇到的坑,焦头烂额搞了很久,记录一下,防止将来再掉进去(万一有和我一样掉进来的,希望能帮到你nnnn都是OPENGL,freeglut不是glutnnnn最近写代码半路突然要用到openGL,正好之前安装了glut,省了再安装配置了,冲冲冲。直接去前面写过的openGL程序里复制粘贴复制粘贴,运行时...

  VS2017在win7 64位机中x86和x64下基本类型的占用空间大小

  [cpp] viewrn plain copyrnrnrn rnrnrnrn#include stdafx.h  rn#include   rn  rn  rnint _tmain(int argc, _TCHAR* argv[])  rn{  rn    int i = 0;  rn    i = sizeof(int);            // x86:4        x64:4

  vc++ 2010 CURL库64位编译时遇到“模块计算机类型“x86”与目标计算机类型“x64”冲突”的解决办法

  最近工作中使用到了Curl库,git clone 下载代码。源代码路径下winbuild目录包含有BUILD.WINDOWS.txt文件,这个就是Visualn C++编译的说明文件了。项目中使用到了openssl,首先复制openssl对应的include、lib到deps路径对应子目录下。根据需要配置编译选项:nmake /f

  c语言中计算int,float,double,char四种数据类型所能表示的数据范围

  在C语言程序设计时可能会因为变量之间的运算而导致溢出,使得最终结果我不我们要的数值,这里列出C语言中几种常用类的最大值最小值(10进制)以供参考:整型[signed]int -2147483648~+2147483648 n无符号整型unsigned[int] 0~4294967295 n短整型 short [int]

  opencv fatal error:模块计算机类型“X86”与目标计算机类型“x64”冲突

  在vs2010中运行使用opencv3.1时报错模块计算机类型“X86”与目标计算机类型“x64”冲突。 n原因是我使用的很多第三方库都是用的64位的,因此在vs下编译时选择的64位编译器,但是opencv3.1官方并未提供vs2010的库,因此在vs2010,2011等低版本上需要自己cmake编译,且cmake编译时必须选择生成64位的。问题解决。 n在网上也搜到了一些类似问题的解决方案,下面直

  Windows下宏定义nn常量\定义n 预定义选项n Windows.h文件n VC编译器n WIN32n √n √(minwindef.h)n  ×n _WIN32n ×n ×n x86和x64环境都定义n _WIN64n ×n ×n x64环境下定义n 由于MingW编译器只支持x86编译经测试MingW编译器也会定义_WIN32宏,Mi...

  opencv3.4 + vs2015配置后运行提示(模块计算机类型“x64”与目标计算机类型“X86”冲突 opencv_world340.dll)

  首先,按网上点击打开链接这位教程重复检查了一遍。然后发现自己还是出现问题。随后找了好久,才注意到是细节出错了。总结需要注意的以下几点:(1)因为是opencv中只有x64位的文件夹,所以属性管理器中是点击Debug64位操作.(2)包含目录这些行要对应填对,不要看错,我就是不小心填到了别的行,一直没注意。(3)右键项目点击属性界面,平台要改为X64,再点击配置管理器,活动解决方案平台 与项目对应...

  1zai在n在程序中经常会遇到不同类型的数据进行运算,若一个运算符两侧的数据类型不同,则先自动进行类型转换,使两者具有同一类型,然后进行运算,现将规律总结如下:n1. +. -. *. /运算的两个数中有一个数为float或double型,结果是double型,因为系统将所有float型数据都先转换为double型,然后进行运算;n2. 若int型与float或double型数据

  转载请注明:问题描述:笔记本是win7,64位,vs2010开发,计算机操作系统上创建的工程是win32的,解决方案平台也是使用默认的win32,debug模式,在调一个opencv项目时报错“模块计算机类型x64与目标计算机x86类型冲突”。解决方法:  (1)右键项目名,点击属性  ...

  一、float类型(内部存储方式)nfloat类型变量需在值后加f,用以与double类型区分nex. float f = 12.5f = 1100.1 = 1.1001x2^3                     指数为3--加127,130--1000n 0010n          (0)31                   (1000 0010) 30-23

  PE头信息中的Machine类型可以判断程序的类型,下面是借助工具判断程序的类型例子n@1:x86nnn@2:x86-64nnn---------------------------------------------------------------------------------------------------------------------------------

  近期调试时发现的坑,其实是老坑,但是隐藏的比较深。rn背景是这样的,项目需要用到modbus通讯,大体的意思是想测试通讯时间,于是在两台电脑之间操作,当从站接到主站的请求时把时间放到一个地址上,这样主站读到这个地址的值与本机时间比较就得到了通讯时间(两台电脑已经通过ntp进行了时间同步)。表示时间时共用了四个寄存器地址,其中两个用来存放秒值,两个存放毫秒值。rn可是在实际过程中却发现,毫秒值时时刻

  fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突

  网上常规做法能解决90%,如果还没解决请看这个:nnnn属性链接器命令行。图中圈出来的地方如果有东西请删除,我的问题就是这么解决的。

  rnrnrnrnrnrn现在正在和一些朋友研究rnOSrn内核(基于Haiku),当然,这些研究只是作为兴趣(有兴趣的朋友可以在Iteye上发邮件给我,一起研究,编译器方向的也热烈欢迎!)。在研究的过程中,需要对像rnx86-64rn的底层要有一定的了解。现在还是在看的《深入理解计算机系统》,rnIntelrn处理器等书还没接触到。rnrnrnrnrnrnrnrn在看了这本书的试读章...

  例:请计算nnnn答案使用浮点输出一行,不要输出多余的零,行尾有回车。C语言使用%g输出nn nn若y定义为double类型,在计算过程中,5要写成5.0nn若y定义为float类型,在计算过程中,5写成5即可,不用写成5.0nn nn能用float尽量不用double,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),double为双精度,占8个字节,有效数位是1...

本文链接:http://saltstudios.net/fenbiebianyi/610.html