判断是否相等因为一个浮点数的存储并不总是精确的,例如在经过大量计算之后可能会将3.14保存为3.1400000000001或者3.1439999999999,这时候如果直接用==来比较这两个数的话会输出错误的结果,false(C++中==只有在两个数字完全相同的情况下才判定为true)。所以需要引入极小数eps来修正,只要不超出这个误差,那么就判定为true。通常定义一个eps为常量1e-8:const double eps = 1e-8;对应的定义判定是否相等的操作Equ:#define Equ(...
在C/C++中数字类型主要有整数与浮点数两种类型,在32位机器中整型占4字节,浮点数分为float,double两种类型,其中float占4字节,而double占8字节。下面来说明它们在内存中的具体表现形式: 整型: 整型变量占4字节,在计算机中都是用二进制表示,整型有无符号和有符号两种形式。 无符号变量在定义时只需要在相应类型名前加上unsigned 无符号整型变量用32位的二进制数字表示,在与十进制进行转化时只需要知道计算规则即可...
本文使用C++语言书写,对于C的小伙伴们,如果编译不通过的话……就说明C里面没有这个内容,可以跳过
通常来说,我们书写程序主要只用整形变量
(signed/unsigned) (long/long long/short) int a;但是有时候,我们又需要一些小数运算。
所以就会出现
float b;
double c;
long double d;至于具体使用方法……自行度娘。这里需要注意一下浮点数是有精度的
计算机中的数据是用二进制存储的。
十进制小数怎么转换为二进制小数呢?
举个栗...
C++ 判断字符串是否是整数或浮点数
在实际写代码过程中,我们经常需要知道一串字符串是否为整数或是浮点数,当然,若是用C++自带的stream等,当然可以非常方便的判断,但效率并不高。因此,我们需要编写出对应的函数,用于高效地直接判断一串字符串是否为整数或者是浮点数(符合C++格式的)。
1. 整数
整数的格式是 “符号(可以没有)+整数” 因而,我们除了对开头进行特殊化判断,其他地方只需要考察是否是数字即可 于是我们可以...
以32位C++编译器讨论,指令系统可以为32位、64位,不可以为16位。
float(32位)表示浮点数
表示范围:-3.4*10^38~3.4*10^38
最大的浮点数,所有尾数取1,得到1.1111...1(小数点后23位),(2-2^-23)*2^127≈2^128≈3.4*10^38;修改符号为负,得到最小的浮点数为-3.4*10^38。
精确度,不失一般性,不妨取指数为23,取两个相邻的值分别为(2-2^-23)*2^23≈2^24-1,(2-2^-22)*2^23≈2^24-2
整型与字节数组的转换比较简单,但是浮点数与字节数组的转换比较麻烦。网上流传得比较多的方案是利用联合体或者强制转换来搞,从内存中直接获取字节数组:
union {char bytes[8];double d;
};这种搞法虽然简单,但是这不是一个跨平台的方案。编码有大端序(Big Endian)和小端序(Small Endian),不同平台的情况可能不一样。同时,不同的编译器也有可能导致字节数组不同。总之,这种方案不怎么可靠。
比较靠谱的办法是研究一下IEE...
头文件
#include <cstdlib>
#include <ctime>
在产生随机数前,需要设置"seed"
srand((unsigned)(time(0)));
随机整数
通用公式a + rand() % n
[a,b) 的随机整数
(rand() % (b-a))+ a
[a,b]的随机整数
(rand() % (b-a+1))+ a;
(a,b) 的随机整数
(rand() % (b-a))+ a + 1;
随机浮点数
[0, 1]的随机浮点数
double val = (double)(rand()) / RAND_MAX;
[0, a]的随机浮点数
double val = (double)(rand()) / RAND_MAX * a;
[a, b]的随机...
C++ 浮点数的存储与精度
先看个例子(如下),我们看下int、float、double在内存的二进制表示#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include<cstdlib>bool isLittleEndian() {int x = 1;return *((char*) (&x)) == 1;
}template<class T>
void printBinary(T d) {char* p = (char*)&d;int sz = sizeof(T); // byteschar* buff = new char[sz * 8 + 1];buff[sz * 8] = \0;int used = 0;for (int n = 0; n <...
前言 两个相近的浮点数之间在某一个精度范围内,认为是相等的例如 double a = 0.10001; double b = 0.1; 两个小数进行比较,精度在0.0000001方案 通过采用if ( fabs(a-b) < 1e-7), 说明a,b是比较的两个数字,1e-7用小数表示0.0000001
时间限制: 1000 ms 内存限制: 65536 KB提交数: 19181 通过数: 11422【题目描述】计算两个双精度浮点数a和b的相除的余数,a和b都是双精度浮点数。这里余数(r)的定义是:a=kb+r,其中k是整数,0≤r<b。
【输入】输入仅一行,包括两个双精度浮点数a和b。
【输出】输出也仅一行,ab的余数。
【输入样例】73.263 0.9973【输出样例】0.4601【来源】
No代码如下:
#include<cstdio>
using namespace std;
int main()
{
double a,b,r;
int...
【题目描述】
两个整数a和b分别作为分子和分母,既分数a/b,求它的浮点数值(双精度浮点数,保留小数点后9位)。
【输入】
输入仅一行,包括两个整数a和b。
【输出】
输出也仅一行,分数 a/b 的浮点数值(双精度浮点数,保留小数点后9位)。
【输入样例】
5 7
【输出样例】
0.714285714
代码
#include<cstdio>
#include<iostream>
using namespace std;
int main(){int a,b;double c; cin >> a >> b;c = (double)a/b; //必须强制转换...
今天写a1, 比较导弹是否到目标(y轴相等即可),到目标就画个圈圈,也就是炸弹,结果怎么都炸不出
搞了半天,想想事情没那么简单
然后就大致比较了一下, 这个世界坐标轴和鼠标坐标轴位置还没搞清楚,但是可以炸了
严谨的方法之后要补一下 bool hasReachedDestination() {//return false;const float errorAllow = 0.001;float errorActual = pos1.y-destY;if (pos0.y > 0.5){if (errorActual<=errorAllow){return true;}}if (pos0.y...
This problem requires that you write a program to compute the exact value of Rn where R is a real number ( 0.0 < R < 99.999 ) and n is an integer such that 0 < n ≤ 25.
输入
The input will consist of a set of pairs of values for R and n. The R value will occupy columns 1 through 6, and the n value will be in columns 8 and 9.
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12输出
The outpu...
判断是否相等
因为一个浮点数的存储并不总是精确的,例如在经过大量计算之后可能会将3.14保存为3.1400000000001或者3.1439999999999,这时候如果直接用==来比较这两个数的话会输出错误的结果,false(C++中==只有在两个数字完全相同的情况下才判定为true)。所以需要引入极小数eps来修正,只要不超出这个误差,那么就判定为true。
通常定义一个eps为常量1e-8:
const double eps = 1e-8;
对应的定义判定是否相等的操作Equ:
#define...
NOIP信息学奥赛资料下载
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 16930 通过数: 12872
【题目描述】
输入一个单精度浮点数,将其向零舍入到整数。说明:向零舍入的含义是,正数向下舍入,负数向上舍入。提示:可以使用强制类型转换来实现。
【输入】
一个单精度浮点数。
【输出】
一个整数,即向零舍入到整数的结果。
【输入样例】
2.3
【输出样例】
2
【来源】
No
代码如下:
#include<iostream>
using namesp...