笔者最近在编程的时候,要控制浮点数的精度进行计算和对比,在网上经过一系列查找后终于
在Csdn上面找到了相关的内容,虽然控制浮点数的精度后没有性能上的提升,笔者知道了如何修改
和控制浮点数的精度了,总的来说,每天要进步一点点。
代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/61dc8d6074906e603796824a9cbf236e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a0c28318c1d0cd015afcd2c8ae2ee9c0.gif)
1 #include "cuda_runtime.h"
2 #include "device_launch_parameters.h"
3
4 #include <stdio.h>
5
6 #include <iomanip>
7 #include <sstream>
8 #include <iostream>
9 #include <cmath>
10
11 // 功能:四舍五入(double),支持正负数
12 // dSrc : 待四舍五入之数
13 // iBit : 保留的小数位数。 0 - 不保留小数、1 - 保留一位小数
14 // 返回值:返回计算结果
15 //
16 double Round(_In_ double dSrc, _In_ int iBit)
17 {
18 double retVal = 0.0;
19 int intTmp = 0;
20
21
22 // 若保留小数位数不正确
23 if (0 > iBit )
24 {
25 return 0;
26 }
27
28 // 若 为负数
29 if (0 > dSrc)
30 {
31 // 首先转为正数
32 dSrc *= -1;
33
34 intTmp = (int)((dSrc + 0.5 / pow(10.0, iBit)) * pow(10.0, iBit));
35 retVal = (double)intTmp / pow(10.0, iBit);
36
37 // 再转为 负数
38 retVal *= -1;
39 }
40
41 // 若为非负数
42 else
43 {
44 intTmp = (int)((dSrc + 0.5 / pow(10.0, iBit)) * pow(10.0, iBit));
45 retVal = (double)intTmp / pow(10.0, iBit);
46 }
47
48 // 返回计算结果
49 return retVal;
50 }
51
52
53 template<typename T>
54 T Round(T dSrc, int iBit) {
55 //若保留小数位数小于0,则返回0
56 if (0 > iBit) {
57 return 0;
58 }
59
60 T retVal = 0.0f;
61 int tmp = 0;
62
63 //1.若小于0
64 if (0 > dSrc) {
65 //转为非负
66 dSrc *= -1;
67 tmp= (int)((dSrc + 0.5 / pow(10.0, iBit)) * pow(10.0, iBit));
68 retVal = ((T)tmp)/ pow(10.0, iBit);
69
70 //还原
71 dSrc *= -1;
72 }
73 else//2.若大于>0
74 {
75 tmp = (int)((dSrc + 0.5 / pow(10.0, iBit)) * pow(10.0, iBit));
76 retVal = ((T)tmp) / pow(10.0, iBit);
77 }
78 return retVal;
79 }
80
81 int main(void) {
82 double pi = 3.1415926;
83 double temp = 0;
84 float test= 35.569999999;
85 temp=Round<float>(pi, 2);
86 //std::cout << temp << std::endl;
87 //printf("tmp=%f\n", temp);
88
89 return 0;
90 }