在vs2019中double如何使用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在vs2019中double如何使用?相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include<math.h>
void main()

double a;
a =8.000000;
printf("%p",a);

为什么输出的值是0000000?
求帮助

vs2019和vs2017一样强大,项目兼容,不用互相删除,而且C/C++,Python,F#,iosandroid,Web,Node.js,Azure,Unity,htmljavascript等开发都可以执行,相关介绍可以看这个官方网址:Visual Studio 2019 参考技术A 在VS2019种double的使用是根据你们的实际状况才能确定不同的公司有不同的用法 参考技术B 不能写%p,那是看指针地址的,输出double值,用%lf 参考技术C 看下说明书,可以问问售后服务人员,以便更好掌握它的使用方法 参考技术D 这种东西在我眼里就是一些英文字母,其实很简单就是乱打

float vs double

float和double都可以表示浮点类型,但是它们可以表示的数据类型范围和精度是不同的。下面的代码便演示了这两种数据类型在一些场景下的差别。

 1  int a = 1219;
 2  int b = 56;
 3  __int64 c = 1503050028000;
 4  int d = 1000;
 5  float e = 0.883889;
 6 
 7 
 8  __int64 r1 = c + __int64((a - b))*d / e;
 9 
10  __int64 r2 = __int64((a - b))*d / e;
11 
12  __int64 r3 = c + r2;

 

 

这段代码运行后,结果是:

r1=1503051382784

r2=1315776

r3=1503051343776

这不科学,小学三年级的学生都知道这不对。

 

让我们来看看编译器是如何处理这段代码的吧。

 

执行完第8行代码前:

技术分享

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

执行完第8行代码后:

技术分享

 

我们看到,编译器使用了CVTSD2SS指令将__int64类型转换为了float类型。正是这一转换过程,导致了精度的丢失。数值从原来的1503050028000变成了1503050152687.

 

最终的执行结果:

技术分享

 

 

我们看到,不仅c的值发生了变化,__int64((a - b))*d=1163000的值也发生了变化。只是这个变化比较小,对最终的结果影响不大而已。

 

 

解决办法1:将float转换为double

技术分享

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解决办法2:如同办法1,将算术运算分成多行,结果也正确。因为__int64并不会被转换为flloat从而丢失精度了。

 

 

所以,float和double的精度差别以及可表示的数值范围确实对数据的运算结果有着很大影响。

 

以上是关于在vs2019中double如何使用?的主要内容,如果未能解决你的问题,请参考以下文章

使用vs2019如何只编译一个c++文件

VS2019 中的 Clang 选项

如何在 VS 2019 中使用 Resharper 的“选择下一个事件”功能?

如何使用 VS 2019 Team Explorer 在浏览器中打开工作项?

如何在Windows 10上使用VS2019 编译C

如何在Windows 10上使用VS2019 编译C