fabs

进行浮动和双重比较的最有效方法是什么?

≯℡__Kan透↙ 提交于 2020-02-26 14:32:09
比较两个 double 或两个 float 值的最有效方法是什么? 简单地这样做是不正确的: bool CompareDoubles1 (double A, double B) { return A == B; } 但是类似: bool CompareDoubles2 (double A, double B) { diff = A - B; return (diff < EPSILON) && (-diff < EPSILON); } 似乎是废物处理。 有人知道更聪明的浮点比较器吗? #1楼 实际上,在数字软件中,您需要检查两个浮点数是否 完全 相等。 我在类似的问题上发布了 https://stackoverflow.com/a/10973098/1447411 因此,您不能说“ CompareDoubles1”通常是错误的。 #2楼 意识到这是一个古老的话题,但是本文是我发现的比较浮点数最直接的文章之一,如果您想探索更多,它也提供了更详细的参考,并且主要站点涵盖了所有问题处理浮点数 《浮点指南:比较》 。 我们可以在“ 浮点公差 ”中找到一些更实用的文章,并注意到存在 绝对公差 测试,在C ++中可以归结为: bool absoluteToleranceCompare(double x, double y) { return std::fabs(x - y) <= std:

几何习题

ε祈祈猫儿з 提交于 2020-02-17 14:07:18
其实几何类的问题也可以分成两大类,不仅仅所有的几何问题都是叉积和设计繁琐的穷举,也会出现一些很偏几何的题目,这种时候,进行充分的数理分析是非常重要的。 Q1: 修水管问题: 话说最近柴小俊迷上了一款战略经营游戏《部落冲突》,他在修建筑的时候面临这样一个问题,他的军营被夹在两条河流之间,现在它想在两条河流的边上修筑供水点,并且需要用水管将两个供水点分别与军营连接起来(两个供水点之间也要相连),那么身为Acmer的你,能否当一次参谋,告诉柴小俊他最少需要准备多长的水管呢? 输入:我们以一条河流为x轴建系数,两条河流在(0,0)交汇。 点A的坐标(另一条河流上的一点,假定其在第一象限)。 点B的坐标(数据保证它落在两条直线的内部)。 输出: 输出柴小俊修建水管的最小长度。 分析:我们首先要做的应该是将这个实际问题抽象成数学(几何)问题,很容易看到,这道问题描述的是如下一个图形。 给出了直线OA,和夹在x、OA之间的B,那么现在需要你求解三角形BCD的最小周长,其中C、D必须分别落在OA和x轴上。 首先我们先进行最优解的分析,也就是我们得找到这个最优三角形。我们任意画一个三角形BCD,很容易看到,这里我们分别做B关于OA、x轴的对称点,记作E、F,那么根据中垂线的性质,我们发现三角形的周长变成了DC+CD+DF,那么为了使得和最小,应该令E、C、D、F共线,也就是说,连接E、F,与OA

NYOJ3——多边形重心问题

≯℡__Kan透↙ 提交于 2020-02-15 11:02:05
多边形重心问题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 5 描述:在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一 个多边形或一条线段或一个多边形和一个线段的连接后的图形; 如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标 的和; 输入:第一行有一个整数0<n<11,表示有n组数据; 每组数据第一行有一个整数m<10000,表示有这个多边形有m个顶点; 输出:输出每个多边形的面积、重心横纵坐标的和,小数点后保留三位; 样例输入 3 3 0 1 0 2 0 3 3 1 1 0 0 0 1 4 1 1 0 0 0 0.5 0 1 样例输出 0.000 0.000 0.500 1.000 0.500 1.000 思路来源:http://blog.csdn.net/kay_zhyu/article/details/8805631 代码: #include<stdio.h> #include<math.h> const int N = 10001; struct POINT { double x; double y; }; POINT point[N]; int main() { int n,num,i;

洛谷 P1378 油滴扩展 dfs搜索

青春壹個敷衍的年華 提交于 2020-02-02 04:58:23
洛谷 P1378 油滴扩展 dfs搜索 题解: dfs尝试所有的油滴放置顺序,找到总面积最大的一种。 代码如下: # include <iostream> # include <algorithm> # include <stdio.h> # include <cmath> # include <queue> # include <cstring> # include <vector> # include <map> # define MAX 10 # define PI 3.1415926 # define INF 0x3f3f3f3f typedef long long ll ; using namespace std ; int n , visit [ MAX ] ; double r [ MAX ] , x [ MAX ] , y [ MAX ] , xa , xb , ya , yb , maxl = 0.0 ; //r为每个油滴的半径,xa,xb,ya,yb为边界,maxl最油滴的最大总面积 double cal_r ( int i ) { //计算当前点油滴的半径 double dis1 = min ( fabs ( x [ i ] - xa ) , fabs ( x [ i ] - xb ) ) ; double dis2 = min ( fabs ( y [ i

2019-12-28

醉酒当歌 提交于 2019-12-29 10:09:12
c语言中求绝对值 fabs()和abs()区别: (1)参数对象不同 abs()是对整数取绝对值, 而fabs()是对浮点数取绝对值。 (2)函数原型不同: int abs(int x) double fabs(double x) (3)头文件不同: abs(): #include <stdlib.h> fabs(): #include <math.h> fabs函数是一个求绝对值的函数,求出x的绝对值,和数学上的概念相同,函数原型是extern float fabs(float x),用法是#include <math.h>。 fabs()函数的声明:double fabs(double x)。其中参数x 是浮点值,这个函数返回x的绝对值。代码示例如下:int main (){int a, b;a = 1234;b = -344;printf(“The absolute value of %d is %lf”, a, fabs(a));printf(“The absolute value of %d is %lf”, b, fabs(b));return(0);}编译和运行上面的程序,这将产生以下结果:The absolute value of 1234 is 1234.000000The absolute value of -344 is 344.000000 来源: CSDN

最简单的让IjkPlayer自动旋转带有rotation视频的方法

霸气de小男生 提交于 2019-12-02 14:43:19
问题 在项目里面我们使用了ijkplayer0.8.8版本去播放网络视频,发现有一些视频播放时被拉伸了。如下图: 把视频抓下来查明原因,发现是视频metadata里面带了rotation信息,而视频的宽高被调换了。 解决方法 官方的解决方法是给一个ROTATION_CHANGE的回调给上层,然后上层去把View做旋转。这样实在是太麻烦。我但是很奇怪的是ijkplayer本身是基于ffplay做的,而ffplay本身是支持这一类视频的旋转播放的。看了一下ijkplayer的代码,在ff_play.c里面发现如下代码: if (ffp->autorotate) { double theta = get_rotation(is->video_st); if ( fabs (theta - 90 ) < 1.0 ) { INSERT_FILT( "transpose" , "clock" ); } else if ( fabs (theta - 180 ) < 1.0 ) { INSERT_FILT( "hflip" , NULL); INSERT_FILT( "vflip" , NULL); } else if ( fabs (theta - 270 ) < 1.0 ) { INSERT_FILT( "transpose" , "cclock" ); } else if ( fabs