C++浮点数转换为定点数

  笔者最近在编程的时候,要控制浮点数的精度进行计算和对比,在网上经过一系列查找后终于

在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=%f\n", temp);
88
89     return 0;
90 }

precision

原文地址:https://www.cnblogs.com/xuelanga000/p/12407121.html

时间: 2024-10-10 02:53:27

C++浮点数转换为定点数的相关文章

DSP中浮点数和定点数 dsp

2020-04-08  21:54:53 1 DSP中的数据表述DSP中数据通常是有定点数与浮点数表示,其中可以对字长进行相关定义,可以选取字长为16位.24位.32位不同字长使用.而格式与字长决定了数据的精度与动态范围,同时也一定程度上决定了DSP处理器的功耗.成本与编程难度. 定点数:小数点位置为确定的. 浮点数:小数点位置可以改变. 定点运算的硬件实现较为简单,功耗较小,主要注意的是数据的定标.溢出以及误差. 浮点器减结构较为复杂,但是精度较高,高级语言容易支持. 2 定点数的格式与相关运

浮点数转换为大写货币金额

/** * 浮点数转换为大写货币金额 * * @author Bobby * */ public class ConvertFloatNumToRMBFormat { private static String[] upperCaseArray = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌&

mysql 浮点数与定点数

浮点数一般用于表示含有小数部分的数值.当一个字段被定义为浮点类型后,如果插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值,然后插入,四舍五入的过程不会报错.在MySQL 中float.double(或real)用来表示浮点数. 定点数不同于浮点数,定点数实际上是以字符串形式存放的,所以定点数可以更加精确的保存数据. mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));Query OK, 0 rows a

MySQL浮点数和定点数

MySQL 分为两种方式:浮点数和定点数.浮点数包括 float(单精度)和 double(双精度),而定点数则只有 decimal 一种表示.定点数在 MySQL 内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据. 浮点数和定点数都可以用类型名称后加"(M,D)"的方式来进行表示,"(M,D)"表示该值一共显示 M 位数字(整数位+小数位),其中 D 位位于小数点后面,M 和 D 又称为精度和标度.例如,定义为 float(7,4)的一个列可以

【C语言模拟实现】浮点数-转-定点数

要想超神,就要什么都精! 知识准备: 1. 输出浮点数的十六进制形式?(利用指针输出) 将浮点数指针-转换成-整型指针,以十六进制的格式输出指针内容. 示例程序: #include<stdio.h> int main() { float *var; scanf("%f",var); printf("%x",*((int*)var)); } 测试: 输入(float) 输出(十六进制) 二进制 8.25 41040000 0100 0001 0000 01

将浮点数转换为字符串

char *F2S(double d, char *str) { char str1[40]; int j = 0; int k, i; i = (int)d; // 浮点数的整数部分 while (i > 0) { str1[j++] = i % 10 + '0'; i /= 10; } for (k = 0; k < j; ++k) { str[k] = str[j - 1 - k]; str[j++] = '.'; for (i = 0; i < 10; ++i) { d *= 1

DSP数据运算基础

转载自:http://bbs.21ic.com/icview-841266-1-1.html 在应用DSP时,其实硬件一般都问题不大,主要的是软件,是算法!下面的关于DSP运算的精华但愿有些价值! 一 DSP定点算数运算 1 数的定标 在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示.一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位.显然,字长越长,所能表示的数的范围越大,精度也越高.如无特别说明,本书均以16位字长为例. DSP芯片的数以2的补

MySQL 浮点数类型和定点数类型

MySQL 中使用浮点数和 定点数来表示小数,浮点数包括单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE),定点数只有DECIMAL一种类型.浮点类型和定点类型都可以用 (M, N) 来表示,其中 M 为精度,表示总共的位数:N 为标度,表示小数的位数. (1) 浮点数与定点数:浮点数指小数点在小数中的位置是不固定的,定点数指小数点在小数中的位置是固定的(2) 单精度与双精度:单精度用 4 个字节来存储的,双精度用 8 个字节来存储,由于存储位不同,他们能表示的数值的范围就不同,也就是

计算机中的浮点数(IEEE754)

IEEE读作[a?-'tr?p(?)l-i:],电气和电子工程师协会.这个是一个包括所有电子和计算机技术的专业团体,制定标准是其工作之一. IEEE浮点数算术标准(IEEE 754)是最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用. 整数运算和浮点数运算会有不同的数学属性是因为它们处理数字表示有限性的方式不同——整数的表示算然只能编码一个相对较小的数字范围,但是这种表示是精确的:而浮点数虽然可以编码一个较大的数值范围,但是这种表示只是近似的. IEEE规定的浮点数编码会将一个浮点数转