浮点数

c++数据类型

柔情痞子 提交于 2019-12-06 03:35:49
c++如何确定常量类型 2019 除非有理由存储为其他类型。否则将常量存储为int 如使用特殊的后缀来表示特定的类型 l表示long u表示unsigned int ul表示unsigned long ll表示long long ull表示 unsigned long long 16为地址数将会被表示为unsigned int 或者值太大,不能存储为int c++浮点数 c++中浮点数使用基准值和缩放因子表示 缩放因子为2的幂 c++有两种书写浮点数方式 12.34 2.53e+8 float 至少有效位32位 一般为32位 double 至少48位 一般64位 long double 至少48位 80,96,128位 可以从cfloat头文件中找到系统限制 ostream中的setf() 该方法迫使输出使用定点表示法。防止程序将较大的值切换为e表示法。 通常cout会删除结尾的0。例如33333.250000显示为33333.25。调用setf()将覆盖这种行为。 该方法还可以控制输出格式。 可以使用cout<< fixed 使得输出使用小数法表示。常与cout.setprecision(val)连用。 cout.precision(val) 设置浮点数精度值。 浮点常量 默认为double 如果希望为float类型,在常量后加f或F 希望为long double类型

C Primer Plus 第3章 数据和C

断了今生、忘了曾经 提交于 2019-12-05 20:54:41
3.1示例程序 程序清单3.1 rhodium.c程序 ------ /*rhodium.c用金属铑衡量您的体重*/ #include <stdio.h> int main (void) { folat weight,value;//folat类型可以处理带有小数点的数字 printf("Are you worth you weight in rhodium? \n"); printf("Let's check it out. \n"); printf("Please enter your weight in pounds: "); scanf("%f",&weight);//%f指示scanf从键盘读取一个浮点值,&weight指定将输入值赋给名为weight的变量中; value=770*weight*14.5833; printf("Your weight in rhodium is worth $%.2f. \n",value);//%f使用.2修饰词使浮点值显示到小数点后两位; printf("You are easily worth that ! If rhodium prices drop,\n"); printf("eat more to maintain your value.\n"); return 0; } 3.2 变量与常量数据

棘手的JavaScript面试题

£可爱£侵袭症+ 提交于 2019-12-05 16:42:27
1、意外的全局变量 在以下代码中, typeof a 和 typeof b 的值分别是什么: function foo() { let a = b = 0; a++; return a; } foo(); typeof a; // => ???typeof b; // => ??? 答案:让我们仔细看看第2行: let a = b = 0 。这个语句确实声明了一个 局部变量 a 。但是,它也声明了一个 全局 变量 b 。 注: b 是一个偶然创建的全局变量。 在浏览器中,上述代码相当于: function foo() { let a; window.b = 0; a = window.b; a++; return a; } foo(); typeof a; // => 'undefined' typeof window.b; // => 'number' typeof a 是 ' undefined '。 变量 a 仅在 foo() 范围内声明,在外部范围内不可用。 typeof b 等于' number '。 b 是一个值为 0 的 全局变量 。 2、鹰眼测试 numbers 数组内容是什么: const length = 4; const numbers = []; for (var i = 0; i < length; i++);{ numbers.push(i + 1);

Python系列-------基本语法

我的梦境 提交于 2019-12-05 14:41:06
Python中数据类型:   一.整数     python可以处理任意大小的整数,当然包括负整数,在python程序中,整数的表示方法和数学的写法一模一样。、        二.浮点数     浮点数也是小数,之所以称浮点数是因为按照科学计数法表示时,一个浮点数的小数点位置是可变的,例如1.23x10 ^9 和12.3x10 ^8 是相等的。     整数和浮点数在计算机内部存储的方式不同的,整数运算永远精确的,浮点数运算则可能会被四舍五入。   三.字符串     字符串是以‘ ’或 “ ”括起来的任意文本。      四.布尔值     布尔值和布尔代数的表示完全一致,一个布尔值只有True,False两种值(注意大写)。     布尔值可以用and,or,not运算   五.空值     空值是python里一个特殊的值,用None表示,None不能理解为0,因为0是有意义的,而None是一个特殊的空值。       python输出语句:print    python的注释语:以#开头,直到行尾结束。 Python中的变量:   在Python中,变量使用一个变量名表示,变量名必须是大小写英文,数字和下划线的组合,且不能用数字开头。   在Python中 等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量

C语言sprintf函数的深入理解

こ雲淡風輕ζ 提交于 2019-12-05 13:55:31
由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf比printf有用得多。所以本文着重介绍sprintf,有时也穿插着用用 pritnf。 sprintf是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] … ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。 printf 和sprintf都使用格式化字符串来指 定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。 1. 格式化数字字符串 sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf在大多数场合可以替代itoa。如: //把整数123打印成一个字符串保存在s中。 sprintf(s, “%d”, 123); //产生“123″ 可以指定宽度,不足的左边补空格: sprintf(s, “%8d%8d”, 123, 4567); //产生:“ 123 4567″ 当然也可以左对齐:

为什么JavaScript里面0.1+0.2 === 0.3是false

▼魔方 西西 提交于 2019-12-05 07:18:18
0.1+0.2 === 0.3 //返回是false, 这是为什么呢?? 我们知道浮点数计算是不精确的,上面的返回式实际上是这样的: 0.1 + 0.2 = 0.30000000000000004 0.1 + 0.2 - 0.3 = 5.551115123125783e-17 5.551115123125783e-17.toFixed(20) = '0.00000000000000005551' 在JavaScript的新规范ES6加入了一个新的东西-->Number.EPSILON Number.EPSILON是在Number对象上面,新增一个极小的常量。根据规格,它表示 1 与大于 1 的最小浮点数之间的差。 对于 64 位浮点数(double)来说,大于 1 的最小浮点数相当于二进制的 1.00..001 ,小数点后面有连续 51 个零。这个值减去 1 之后,就等于 2 的-52 次方。 Number.EPSILON 实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。 引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。 好了,我们来解决上面的浮点数计算的问题: Number.EPSILON 可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即 Number.EPSILON *

JS中关于0.1+0.2 !==0.3 和0.1+0.7!==0.8的问题

↘锁芯ラ 提交于 2019-12-05 07:14:40
** JS中关于0.1+0.2 !==0.3 和0.1+0.7!==0.8的问题 ** 在js中,0.1+0.2不会等于0.3,而是等于: 在js中,0.1+0.7不会等于0.8,而是等于: JS中数字运算时,有一个叫做 数字运算中的精度缺失的问题 要弄清这个问题的原因,首先我们需要了解下在计算机中数字是如何存储和运算的。在计算机中,数字无论是定点数还是浮点数都是以多位二进制的方式进行存储的。 在JS中数字采用的IEEE 754的双精度标准进行存储,我们可以无需知道他的存储形式,只需要简单的理解成就是存储一个数值所使用的二进制位数比较多而已,这样得到的数会更加精确。 这里为了简单直观,我们使用定点数来说明问题。在定点数中,如果我们以8位二进制来存储数字。 对于整数来说,十进制的35会被存储为: 00100011 其代表 2^5 + 2^1 + 2^0。 对于纯小数来说,十进制的0.375会被存储为: 0.011 其代表 1/2^2 + 1/2^3 = 1/4 + 1/8 = 0.375 而对于像0.1这样的数值用二进制表示你就会发现无法整除,最后算下来会是 0.000110011…由于存储空间有限,最后计算机会舍弃后面的数值,所以我们最后就只能得到一个近似值。 在JS中采用的IEEE 754的双精度标准也是一样的道理,我们且不管这个标准下的存储方式跟定点数存储有何不同

javascript为什么 0.1 + 0.2 = 0.30000000000000004

梦想的初衷 提交于 2019-12-05 07:12:49
如果我问你 0.1 + 0.2 等于几?你可能会送我一个白眼,0.1 + 0.2 = 0.3 啊,那还用问吗?连幼儿园的小朋友都会回答这么小儿科的问题了。但是你知道吗,同样的问题放在编程语言中,或许就不是想象中那么简单的事儿了。 不信?我们先来看一段 JS。 var numA = 0.1; var numB = 0.2; alert( (numA + numB) === 0.3 ); 执行结果是 false。没错,当我第一次看到这段代码时,我也理所当然地以为它是 true,但是执行结果让我大跌眼镜,是我的打开方式不对吗?非也非也。我们再执行以下代码试试就知道结果为什么是 false 了。 var numA = 0.1; var numB = 0.2; alert( numA + numB ); 原来,0.1 + 0.2 = 0.30000000000000004。是不是很奇葩?其实对于浮点数的四则运算,几乎所有的编程语言都会有类似精度误差的问题,只不过在 C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题,而 JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出。下面就分析下为什么会有这个精度误差,以及怎样修复这个误差。 首先,我们要站在计算机的角度思考 0.1 + 0.2 这个看似小儿科的问题

为什么0.1+0.2不等于0.3

跟風遠走 提交于 2019-12-05 07:12:34
原文地址: 为什么0.1+0.2不等于0.3 先看两个简单但诡异的代码: 0.1 + 0.2 > 0.3 // true 0.1 * 0.1 = 0.010000000000000002 0.1加0.2为什么就不等于0.3昵?要回答这个问题,得先了解计算机内部是如何表示数的。 计算机内部如何表示数 我们都知道,计算机用位来储存及处理数据。每一个二进制数(二进制串)都一一对应一个十进制数。 1. 计算机内部如何表示整数 这里以十进制数13来展示“按位计数法”如何表示整数: 十进制值 进制 按位格式 描述 13 10 13 1x10^1 + 3x10^0 = 10 + 3 13 2 1101 1x2^3 + 1x2^2 + 0x2^1 + 1x2^0 = 8 + 4 + 0 + 1 2. 计算机内部如何表示小数 再看小数怎么用按位计数法表示,以十进制数0.625为例: 十进制值 进制 按位格式 描述 0.625 10 0.625 6x10^-1 + 2x10^-2 + 5x10^-3 = 0.6 + 0.02 + 0.005 0.625 2 0.101 1x2^-1 + 0 x2^-2 + 1x2^-3 = 1/2 + 0 + 1/8 3. 如何用二进制表示0.1 关于十进制与二进制间如何转换,这里不细说,直接给出结论: 十进制整数转二进制方法:除2取余;十进制小数转二进制方法

javascript中0.1 + 0.2 != 0.3?

倾然丶 夕夏残阳落幕 提交于 2019-12-05 07:11:34
0.1+0.2 等于0.3吗?相信拿着这条题目随便问一个高年级的小学生,他们都会毫不犹豫都回答:相等。是的,相等是正常的,这是常识。但是都说实践是检验真理的唯一标准,拿这道简单的算术题用javascript在chrome控制台试验一下: 结果令人大跌眼镜,在控制台输入 0.1+0.2 == 0.3 返回的结果竟然是false!!!!我们输入 0.1+0.2 ,看看结果,竟然是 0.30000000000000004 。 这是为什么呢?在《Javascript权威指南》中有提到,JS是不区分整数和浮点数的,JS采用的是IEEE 754标准定义的64位浮点格式表示数字,所以JS中的所有数字都是浮点数。按照JS的数字格式,整数有的范围是 -2^53 ~ 2^53 ,而且只能表示有限个浮点数,能表示的个数为 2^64 − 2^53 + 3 个。至于为什么是这个范围,可以具体看看《 JavaScript 中的数字 》这篇文章也解下。而我们都知道,浮点数的个数是无限的,这就导致了JS不能精确表达所有的浮点数,而只能是一个近似值。 那怎样才能比较 0.1+0.2 == 0.3 呢?既然浮点数是一个近似值,那我们可以认定在某个可以接受的精度范围内,他们是相等的。因此可以定义一个比较函数来比较浮点数。 function isFloatEqual(f1,f2,digits) { return f1