论 C++ 中 double 类型的优化问题
是这样的,我在 OI 出题中,std 习惯使用 double,但是求解,在大数据的情况下用 long double,小数据用 double。
虽然这样也没什么问题,但是在 std 中我是不开启 -O2 的,但洛谷的环境是默认 -O2 的。然后有一次我再核对 std 时,我发现 double 在 O2 和不 O2 的情况下,大数据的结果是不一样的,可以给一个例子。
测试代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
long double x;
double dx;
cin >> x;
cin >> dx;
x += 114514.1919;
dx += 114514.1919;
printf("LONG DOUBLE: %Lf\nDOUBLE: %lf", x, dx);
}
输入:
15151578734687
15151578734687
输出:
LONG DOUBLE: 15151578849201.191900
DOUBLE: 15151578849201.191406
经过测试,在开不开启 O2 的情况下,double 都会出现问题。
所以,在大数据的情况下,为了精度, long double 是更好的选择。
经过更多的测试后,发现 double 在代码复杂性较低的情况下,优化产生的误差较小,但在复杂度高的情况下,误差可能会达到 \(10^3\)。
所以推荐使用 long double。就酱紫。我也不会复杂的,这是一个应对方法。
论 C++ 中 double 类型的优化问题的更多相关文章
- Java中double类型的数据精确到小数点后两位
Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...
- struts2中Double类型的转换
今天做项目,ssh + Extjs,页面js中定义了几个NumberField,对应的value都是double类型的,其中有个NumberField的name为 name,结果执行的时候报错了,说找 ...
- JAVA中double类型运算结果异常的解决
问题: 对两个double类型的值进行运算,有时会出现结果值异常的问题.比如: System.out.println(19.99+20); System.out.println(1.0-0.66); ...
- 程序中double类型的数输出为什么要用lf
在c89和c++中double的输入和输入输出都用%lf 在c99中,double的输出必须用%f,而输入要用%lf oIER一般使用c++,所以输出直接%lf即可.
- hbase中double类型数据做累加
public static Result incr(String tableFullName, String rowKey, String family, String qualifier, long ...
- java中double类型显示两个小数,比如12.00
Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如 0,返回“0.00” ...
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...
- Java中Double类型计算问题
public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); ...
- 关于java中Double类型的运算精度问题(转)
Java Java double:浮点数:精确计算 public class Test{ public static void main(String args[]){ Syst ...
- Java中Double类型数据比较大小
方法一:转成字符串之后比较 如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个double数据是否相等.注意这种方法 ...
随机推荐
- (微服务)服务治理:熔断器介绍以及hystrix-go的使用
一.什么是熔断器 要理解熔断器,可以先看看电路中使用的保险丝. 保险丝(fuse)也被称为电流保险丝,IEC127 标准将它定义为"熔断体(fuse-link)".保险丝是一种保证 ...
- Flutter——安装依赖包时,出现Waiting for another flutter command to release the startup lock
问题描述 运行 flutter packages get 时 出现 Waiting for another flutter command to release the startup lock 解决 ...
- click模块解析命令行参数
click模块解析命令行参数 安装 pip install click 操作步骤 1)使用@click.command()装饰一个函数,使之成为命令行接口 2)使用@click.option()等装饰 ...
- 【Azure App Service】同一个App Service下创建多个测试站点的方式
问题描述 在一个App Service中,部署多个应用,每个应用相互独立,类似与IIS中在根目录下创建多个子应用的情况. 问题解答 可以的.通过App Service Configuration页面, ...
- JVM内存模式
Java内存模型即Java Memory Model,简称JMM. JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式.JVM 是整个计算机虚拟模型,所以 JMM 是隶属于 JV ...
- Python-Json异常:Object of type Decimal is not JSON serializable
源起: 使用python分离出一串文本,因为是看起来像整数,结果json转换时发生异常:TypeError: Object of type Decimal is not JSON serializab ...
- 6、zookeeper应用场景-分布式唯一ID
分布式唯一id案例 原理:使用zookeeper有序节点,节点后会加上有序的id,用这个id来当唯一ID 在过去的单库单表型系统中,通常第可以使用数据库字段自带的auto_ increment属性来自 ...
- koa 放置 前台打包dist 目录
const Koa = require('koa'); const app = new Koa() //public是指的放置前端静态资源的文件夹名称 app.use(require('koa-sta ...
- 【数据结构】C语言实现动态扩容数组
// resizable array /* Think about a set of functions that provide a mechanism of resizable array of ...
- 多线程系列(十九) -Future使用详解
一.摘要 在前几篇线程系列文章中,我们介绍了线程池的相关技术,任务执行类只需要实现Runnable接口,然后交给线程池,就可以轻松的实现异步执行多个任务的目标,提升程序的执行效率,比如如下异步执行任务 ...