python中float和double,python中float和double有什么区别

我读过双精度和单精度的区别。然而,在大多数情况下,float和double似乎是可互换的,即使用一个或另一个似乎不会影响结果。是真的吗?浮球和双打何时可以互换?他们之间有什么区别?

巨大的差异。

顾名思义,double的精度是float的2倍。一般来说,double有15个十进制的精度数字,而float有7个。

以下是计算位数的方法:

double has 52 mantissa bits + 1 hidden bit: log(253)÷log(10) = 15.95 digits

float has 23 mantissa bits + 1 hidden bit: log(224)÷log(10) = 7.22 digits

当重复计算时,这种精度损失可能导致更大的截断误差累积,例如:

float a = 1.f / 81;

float b = 0;

for (int i = 0; i < 729; ++ i)

b += a;

printf("%.7g

", b); // prints 9.000023

虽然

double a = 1.0 / 81;

double b = 0;

for (int i = 0; i < 729; ++ i)

b += a;

printf("%.15g

", b); // prints 8.99999999999996

另外,float的最大值约为3e38,double约为1.7e308,因此使用float可以比double更容易达到"无穷大"(即特殊的浮点数),例如计算60的阶乘。

在测试期间,可能有一些测试用例包含这些巨大的数字,如果使用float,可能会导致程序失败。

当然,有时甚至double也不够精确,因此有时我们有long double1(上面的例子在Mac上给出了9.00000000000000066),但所有浮点类型都有舍入错误,因此,如果精度非常重要(例如,货币处理),则应使用int或分数类。

此外,不要使用+=来求和大量的浮点数,因为错误会快速累积。如果您使用的是python,请使用fsum。否则,尝试实现Kahan求和算法。

〔1〕:C和C++标准没有指定EDCOX1、1、EDCOX1、0和EDCOX1×9的表示。这三个都有可能实现为IEEE双精度。然而,对于大多数架构(gcc、msvc、x86、x64、arm),float实际上是一个IEEE单精度浮点数(binary32),double是一个IEEE双精度浮点数(binary64)。

求和的通常建议是在求和之前按大小(最小的第一个)对浮点数进行排序。

注意,C/C++浮点和double几乎总是IEEE单精度和双精度,C//C++long双取决于CPU、编译器和OS而变化得更大。有时它与double相同,有时是特定于系统的扩展格式,有时是ieee quad precision。

以下是标准C99(ISO-IEC 9899,2.2.5×10)或C++ 2003(ISO-IEC 1488—2003—3.1.9×8)标准:

There are three floating point types: float, double, and long double. The type double provides at least as much precision as float, and the type long double provides at least as much precision as double. The set of values of the type float is a subset of the set of values of the type double; the set of values of the type double is a subset of the set of values of the type long double.

C++标准增加了:

The value representation of floating-point types is implementation-defined.

我建议大家深入研究一下每一位计算机科学家应该知道的关于浮点运算的优秀知识,它涵盖了IEEE浮点标准。您将了解表示细节,并且您将认识到大小和精度之间存在权衡。浮点数表示的精度随着大小的减小而增加,因此-1和1之间的浮点数是精度最高的浮点数。

给定一个二次方程:x2减去4.0000000 x+3.99999999=0,10个有效数字的确切根是,r12.000316228和r21.999683772。

使用float和double我们可以编写一个测试程序:

#include

#include

void dbl_solve(double a, double b, double c)

{

double d = b*b - 4.0*a*c;

double sd = sqrt(d);

double r1 = (-b + sd) / (2.0*a);

double r2 = (-b - sd) / (2.0*a);

printf("%.5f\t%.5f

", r1, r2);

}

void flt_solve(float a, float b, float c)

{

float d = b*b - 4.0f*a*c;

float sd = sqrtf(d);

float r1 = (-b + sd) / (2.0f*a);

float r2 = (-b - sd) / (2.0f*a);

printf("%.5f\t%.5f

", r1, r2);

}

int main(void)

{

float fa = 1.0f;

float fb = -4.0000000f;

float fc = 3.9999999f;

double da = 1.0;

double db = -4.0000000;

double dc = 3.9999999;

flt_solve(fa, fb, fc);

dbl_solve(da, db, dc);

return 0;

}

运行程序会给我:

2.00000 2.00000

2.00032 1.99968

请注意,这些数字并不大,但仍然可以使用float获得取消效果。

(事实上,上述方法不是使用单精度或双精度浮点数求解二次方程的最佳方法,但即使使用更稳定的方法,答案仍然保持不变。)

双精度是64,单精度是(float)是32位。

双精度数有一个更大的尾数(实数的整数位)。

任何不准确的地方都会减少。

浮点数计算中涉及的数字大小不是最相关的。正在执行的计算是相关的。

实际上,如果您正在执行一个计算,结果是一个无理数或循环小数,那么当该数被压缩到您使用的有限大小的数据结构中时,就会出现舍入错误。因为double的大小是float的两倍,所以舍入误差会小很多。

测试可能特别使用会导致此类错误的数字,因此测试您是否在代码中使用了适当的类型。

类型float,32位长,精度为7位。虽然它可以存储范围非常大或非常小的值(+/-3.4*10^38或*10^-38),但它只有7个有效数字。

类型double,64位长,具有更大的范围(*10^+/-308)和15位精度。

类型long double名义上是80位,但是给定的编译器/OS对可能会将其存储为12-16字节,以便于对齐。长双精度数的指数非常大,应该有19位数的精度。微软以其无穷的智慧,将长双字节限制为8字节,与普通双字节相同。

一般来说,只需在需要浮点值/变量时使用类型double。默认情况下,表达式中使用的文本浮点值将被视为双精度浮点值,并且大多数返回浮点值的数学函数都返回双精度浮点值。如果你只使用double,你会省去很多头痛和打字。

实际上,对于浮点数来说,精确到7到8,7.225。

浮点数的精度比双精度小。尽管你已经知道了,但是为了更好地理解浮点运算,请阅读我们应该知道的内容。

不,在C和C++中,浮球和双打可以有完全相同的精度。这取决于实现。例如,请参见Gregory Pakosz的回答。

例如,所有的AVR双精度数都是浮点数(四字节)。

我刚刚遇到了一个错误,我花了很长时间才弄明白,它可能会给您一个关于浮点精度的好例子。

#include

#include

int main(){

for(float t=0;t

python中float和double有什么区别_关于C++:float和double ...Python小数/浮点数(float)类型详解 - 雾雾雾 - 博客园python | 输出实数 是用 double() 还是 float()了 - 代码天地Python学习:小数/浮点数(float)类型详解_Python热爱者 ...大师,python里,如果我想输出实数 是用 double() 还是 …python实现float/double的0x转化 - Jimmy_Nie - 博客园python 双精度浮点数用什么表示_百度知道Python中有double类型吗?Python怎么表示double类型 - 优 …python - np.float64和np.double有什么区别? - 堆栈内存溢出doublevalue_Java FloatdoubleValue()方法与示例python – 如何使用numpy longdouble dtype?基本数据类型与变量——Java和python对比Python 浮点数数据类型详解(float)[学习 Python 必备基础知识][看此一篇就够了]Python中的强制类型转换函数int()和float()究竟把数据转换成了哪种整型、哪种浮点型(这是个伪命题,Python的...float 浮点数与零值0比较大小double_to_float_converter:将c ++源文件从double转换为float将字符串转换为int或floatpython 3?python – Numpy将float32转换为float64C++ / Python 取值为系统 float 类型定义最大或最小值python中如何比较两个float类型的数据是否相等python、MATLAB的默认浮点数精度如何使用numpy longdouble数据类型?python的浮点数占多少个字节数据类型转换floatdouble与16进制字符串互转Python NumPy 的数据类型python3的数字类型:整数、浮点数、布尔【语言对比】基本数据类型对比C/PythonPython中调用C程序Python numpy.double() 使用实例python – Numpy longdouble算术似乎没有转换为long doublefloat和double的主要区别python中 float是什么意思?解决float型数据精度损失问题python float保留两位小数Python中浮点型的基本内容介绍(代码示例)
python float有几位python float是多少位在python中floatnumpy转换为floatpython中的float是什么python里面的floatpython中float的意思python 默认floatpython中float和double有什么区别Python中float和int的区别Python中float和intpython中float和eval的区别python中float是什么python中float的用法python里面floatpython中的float函数python的float函数python中float的意思西游记游戏释厄传通关视频多维度思考问题的核心佳能打印机检查是否开机并且联机嘉嘉语音游戏下载怎么在网络上写小说十二地支入墓入库条件2021年小说排行榜前十起点现状用英语怎么翻译怎样转换音频格式迷你世界公主故事真假公主成笔画笔顺怎么写组词