笔者最近在编程的时候,要控制浮点数的精度进行计算和对比,在网上经过一系列查找后终于
在Csdn上面找到了相关的内容,虽然控制浮点数的精度后没有性能上的提升,笔者知道了如何修改
和控制浮点数的精度了,总的来说,每天要进步一点点。
代码如下:
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=%fn", temp);
88
89 return 0;
90 }
precision
原文链接: https://www.cnblogs.com/xuelanga000/p/12407121.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/193946
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!