首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么c/c ++浮点类型如此奇怪的命名?

在C/C++中,浮点类型的命名可能会让人觉得奇怪,这主要是因为历史原因和对硬件的考虑。在早期的计算机系统中,浮点数的表示和运算是通过硬件实现的,因此在C语言中,浮点类型的命名是基于硬件实现的,这也是为什么它们看起来有些奇怪的原因。

在C语言中,浮点类型主要有两种:float和double。float是单精度浮点数,而double是双精度浮点数。单精度浮点数和双精度浮点数的主要区别在于它们的精度和大小。单精度浮点数通常占用32位内存空间,而双精度浮点数通常占用64位内存空间。这种命名方式是基于硬件实现的,因为在早期的计算机系统中,浮点数的表示和运算是通过硬件实现的,因此需要考虑硬件的限制和特性。

另外,C/C++中的浮点类型还包括long double,它是一种扩展精度的浮点数类型,通常占用80位或128位内存空间。这种类型的命名也是基于硬件实现的,因为在早期的计算机系统中,浮点数的表示和运算是通过硬件实现的,因此需要考虑硬件的限制和特性。

总之,C/C++中浮点类型的命名方式是基于历史原因和硬件实现的考虑,因此看起来有些奇怪。如果需要更高精度的浮点数运算,可以使用第三方库,例如GMP、MPFR等。这些库提供了更高精度的浮点数运算,可以满足各种应用场景的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言之浮点类型

文章目录 浮点类型 1. 基本介绍 2. 案例演示: 3. 浮点分类 4. 说明一下: 5. 浮点型使用细节 浮点类型 1....基本介绍 C 语言浮点类型可以表示一个小数,比如 123.4 ,7.8 ,0.12 等等 2. 案例演示: 3. 浮点分类 ? 4....说明一下: 关于浮点数在机器中存放形式简单说明,浮点数=符号位+指数位+尾数位 , 浮点数是近视值 尾数部分可能丢失,造成精度损失。 5....浮点型使用细节 浮点型常量默认为 double 型 ,声明 float 型常量时,须后加‘f’或‘F’。...printf("d1=%f ", d1); // 在输出时,默认保留 小数点 6 位 代码 在输出时,如果%f 默认保留小数点 6 位,如果想给定数超过6位,可以这样写:d1=%7f,7就代表小数点后面

1.4K20

C#中坑--浮点类型

浮点精度可变,在一个表达式中只有当除数是2整数次幂时才能准确无误计算出结果,其他情况下用浮点类型无法准确计算出结果。这个听起来很乱对吧,下面我就详细地讲一下。...当我们将浮点类型变量值设置为0.1时,C#就会很容易表示成0.099999999999999999,或者0.1000000000000000001,或者是一个非常接近0.1数字。...根据定义,浮点精度与它所代表数字大小成正比,也就是说浮点精度是由有效位数个数决定,而不是由一个固定值决定。...所以说如果在开发中需要精确数字(例如金融行业应用),那么我们就不能使用浮点类型,应该使用 decimal 类型

1.1K30

C语言浮点数float类型秘密

1 前言 我们在学习 C 语言时,通常认为浮点数和小数是等价,并没有严格区分它们概念,这也并没有影响到我们学习,原因就是浮点数和小数是绑定在一起,只有小数才使用浮点格式来存储。...其实,整数和小数可以都使用定点格式来存储,也可以都使用浮点格式来存储,但实际情况却是,C 语言使用定点格式存储整数,使用浮点格式存储小数,这是在 “数值范围” 和 “数值精度” 两项重要指标之间追求平衡结果...3 浮点数在内存中存储 首先明确一点,无论是整型、浮点型还是字符等等数据类型在计算机底层都是以二进制方式存储浮点数在内存中存储和整数不同,因为整数都可以转换为一一对应二进制数据。...浮点数转换到内存中存储步骤分为如下三步: 将浮点数转换成二进制 用科学计数法表示二进制浮点数 计算指数偏移后值 对于第3点:计算指数时需要加上偏移量(后面有介绍为什么使用偏移量),而偏移量值与浮点类型有关...6 解剖:为什么要用偏移量方式来计算指数?

4.2K2219

EasyC++07,C++浮点类型

今天是EasyC++专题第7篇,浮点类型。 点击『阅读原文』跳转github仓库,欢迎star,欢迎pr~ 浮点浮点数是C++第二组基本类型,它能够表示带小数部分数字。...不仅如此浮点范围也比int更大,可以表示更大范围数字。 我们都知道在计算机当中,所有数据本质上都是转化成二进制存储。...m全为0,表示无穷大,如果m不全为0,表示nan(not a number) 关于e规则看起来有些复杂,初看觉得有些难以理解,为什么要用减去中间值设计,而不用符号位?...浮点类型C语言一样,C++也有三种浮点类型:float,double和long double。和整型一样,这三种类型都是浮点数,只不过表示范围不同。...cout输出浮点数会删除结尾0 书写浮点数常量时默认为double类型,如果需要强制表示为float类型,请在结尾加上后缀f或者F,如:2.34f 由于浮点数有精度,不能直接判断两个浮点数是否相等,很有可能得不到预期结果

58430

C语言:十六进制(HEX)和浮点类型(float、double)转换

目录 1、浮点类型转换为十六进制 方法1:用地址用指针 方法2:用共用体 方法3: 使用memcpy 2、十六进制转换为浮点类型 ---- 近日在研究Modbus协议时候遇到这样一个情况:使用ModScan32...软件,可将HEX和浮点类型转换,如下所示: ?...那么如何在程序设计中实现十六进制和浮点类型转换呢?...C语言和C#语言中,对于浮点类型数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f...参考链接,拓展学习: 1、浮点类型在计算机里面的表示方法 2、浮点数在计算机中存储方式 3、如何把一个float存到一个长度为4char数组中?

4.5K20

C++11 async那些奇怪问题

C++11标准增加async接口,便于异步执行任务,使用async会遇到两个奇怪问题: 第一, 为什么异步任务有时马上执行,有时很久才执行,甚至不执行。...第二, 日志如果有打印线程ID,会发现不同任务日志输出线程ID有时一样。...C++11async有两个版本: 版本1:future async(Function f, Args&&…args) 版本2:future async(launch policy, Function f...不同地方在于版本2多一个参数launch。 版本2launch参数有2个取值:launch::async 和 launch::deferred。...设置launch参数为launch::async,启动一个线程来执行任务,该线程可能是线程池某个线程,它执行完任务后会执行下一个任务,于是不同任务日志输出线程ID可能会一样。

96440

C++std命名空间

总以为自己懂了,可是仔细想想,多问自己几个问题,发现好像又不是很清楚 命名空间(Namespace)是C++中一种用于解决命名冲突问题机制,它能够将全局作用域划分为若干个不同区域,每个区域内可以有相同名称标识符...命名空间提供了一种将相关函数、类、变量等组织在一起方式,使得代码更加清晰、模块化和可维护。通过使用命名空间,我们可以避免不同模块之间命名冲突,并且可以更好地组织和管理代码。...在C++中,我们可以使用namespace关键字来定义命名空间 namespace MyNamespace { int x = 5; void printX() { std...(Standard Library)命名空间(namespace),标准库是C++语言提供一组功能强大函数、类和模板集合,它为开发者提供了各种常用工具和功能,包括输入输出、容器、算法、字符串处理...可能导致命名冲突,因此应该慎重使用,一般工程项目都是用std::string这样带命名空间来避免名称冲突和提供代码可读性

13110

C语言之浮点存储

C语言中,有两种类型浮点数:32位float和64位double,而在计算机中存储是用二进制科学计数法(即基数为2)表示值 例如100=1100100B=1.1001B*26,123.456...将C语言中定义转换为汇编验证一下 ? 再看一个纯小数存储,例如0.00123456,这次倒着推导一下 ?...其中第一个0表示正值;挨着8位01110101B=117,表示指数为(117-127)=-10;最后23位表示尾数小数部分,前面加上整数部分1,再左移23位之后就是101000011101000011110110B...所以原值就是10604790/8589934592=0.0012345600407571,可见前10位小数都是正确,精度还可以 ? 最后试个double123.456 ?...好吧,double精度确实高,比float表示准多了! 我是泰山,专注VX 15年! 一起学习,共同进步!

1.4K11

C语言进阶:浮点型数据存储

一.浮点数据类型 float double long double 注意在定义 float 类型变量时,默认是 double 型,在数据后面加个 f 就是float类型了。...IEEE 745 规定: 1.对于32位浮点数,最高1位是符号位s,接着8位是指数E,剩下23位为有效数字M。...如图: 2.对于64位浮点数,最高1位是符号位S,接着11位是指数E,剩下52位为有效数字M。 如图: IEEE 754对有效数字M和指数E,还有一些特别规定。...下面以32位浮点数为例: 然后,指数E从内存中取出还可以再分成三种情况: E不全为0或不全为1 这时,浮点数就采用下面的规则表示,即指数E计算值减去127(或1023),得到真实值,再将 有效数字...我们来看: a=9我们能理解,但 *p=0.000000 是为什么

13410

C语言中浮点数据类型(你学废了吗)

——浮点类型。...这是因为,浮点数并不能表示无限精确,它会存在着一定误差。 C标准规定,float类型必须至少能表示6位有效数字,并且取值范围至少是10^-37~10+37。...所以,使用float来装365.12345时,前面六位数值是准确,但是后面的数值略有误差。 3. 浮点类型:double double叫做双精度浮点型,是比float精度更高类型。...但是,如果涉及高精度领域计算时,需要额外使用特殊方法进行数值计算,以尽量减少误差。 4. 浮点类型所占字节大小 之前对整型经验,越大范围整型类型所占空间越大。...那么对于浮点类型来说,越高精度、越大范围浮点类型,应该也会占用越大空间。 用sizeof来测量一下float和double分别占用多大空间。

45310

C++】函数指针 ① ( 函数三要素 | 函数类型 | 函数指针类型 | 函数类型命名 )

一、函数类型 和 函数指针类型 1、函数三要素 函数原型有三个重要要素 : 函数名称 : 使用 标识符 为函数命名 ; 用来标识函数名称 , 要求符合标识符命名规则 , 并且要有意义 ; 参数列表...; 每个函数都有一个入口地址 , 这个地址是一个指针 , 指向函数代码块在内存中位置 ; 函数指针变量就是用来存储这个入口地址变量 , 函数指针变量类型需要与被调用函数类型匹配 , 即函数指针类型应该与被调用函数返回值类型和参数列表类型一致...; 函数指针类型示例 : 下面的函数指针类型 表示函数 , 返回值为空 , 参数为 int 类型 ; void (*)(int) 4、函数类型命名C 语言中 , 可以使用 typedef...; newfunname 是 函数重命名新名称 ; parameterlist 是 函数参数列表 ; 为 函数类型 和 函数指针 类型命名 : // void (int) 函数类型命名, 可以使用该类型指针接收函数地址...; 二、代码示例 - 函数类型命名 1、代码分析 下面的代码中 , 为 函数类型 void (int) 和 函数指针类型 void (*)(int) 进行了重命名 , 并为这两个类型变量 进行赋值

30750

C语言之预处理命令与用typedef命名已有类型

对函数中实参和形参都要定义类型,二者要求一致。而宏不存在类型问题,宏名无类型。宏定义时,字符串可以是任何类型数据。 调用函数只可得到一个返回值,而用宏定义可以设法得到几个结果。...第二:别忘了#endif   用typedef命名已有类型 陷阱一:   记住,typedef是定义了一种类型新别名,不同于宏,它不是简单字符串替换。...宏定义只是简单字符串代换(原地扩展),而typedef则不是原地扩展,它新名字具有一定封装性,以致于新命名标识符具有更易定义变量功能。...功能不同 Typedef用来定义类型别名,这些类型不只包含内部类型(int,char等),还包括自定义类型(如struct),可以起到使类型易于记忆功能。 ...typedef 有另外一个重要用途,那就是定义机器无关类型,例如,你可以定义一个叫 REAL 浮点类型,在目标机器上它可以i获得最高精度: typedef long double REAL;

1.5K90

C++】C++对C语言关系,拓展及命名空间使用

C++11版本增加了许多现代化特性,例如类型推断、lambdas表达式、移动语义、多线程支持等,大大提高了C++编程效率和效果。 C++被广泛应用于游戏开发、图形图像处理、嵌入式系统等领域。...C++11标准:发布于2011年,这是一个重要标准版本,增加了许多新语言特性,如auto类型推导、lambda表达式、智能指针等。...<< endl; return 0; } 输出: 注意: 1️⃣、在C语言中,头文件使用扩展名.h,作为一种简单通过名称标识文件类型方式。...命名空间使用 命名空间定义 C++中命名空间是一种封装标识符(如变量名、函数名、类名等)方式,用于防止命名冲突。...直接使用完全限定名 这是最直接方式,通过命名空间名称和作用域解析运算符::来访问命名空间中变量、函数或类型

11210

C++】C++中类型转化

说起类型转化,我们在C语言之前学习中可以了解到,类型转换可以分为两种情况:隐式类型转化;显示类型转化。但是为什么c++中还要继续对类型转化做文章呢?我们一起来看: 1....C语言中类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式类型转换...C++中类型转换呢?...所以C++出了一套类型转化规范写法。...为什么还是2呢? 原因是:在编译时,因为是const修饰(不会修改),所以就会把a值放入寄存器中,通过*p来改变是内存中a值,但是a在寄存器中值没有改变,依旧是2,所以打印时就是2。

1K10

C++笔记(5)——浮点比较

判断是否相等 因为一个浮点存储并不总是精确,例如在经过大量计算之后可能会将3.14保存为3.1400000000001或者3.1439999999999,这时候如果直接用==来比较这两个数的话会输出错误结果...,false(C++中==只有在两个数字完全相同情况下才判定为true)。...) 上面这行代码是通过宏定义来定义出一个名为Equ函数,这个函数会将a和b相减,如果相差结果绝对值小于极小值eps,那么就判定为true,否则为false。...上面加这么多括号是为了防止宏定义可能带来错误,不能够省略掉。相对应,如果需要使用不等于,那么只需要用!Equ(a, b)即可。...另外还有: 在经过大量计算后可能因为误差累计,一个变量中存储0实际上是一个非常小负数,如果这时候对这个变量进行开根号操作sqrt,那么会报错(asin(x)类似,当存放x为+1或-1时也会出现类似的情况

2.6K30
领券