是这样的,我在 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 类型的优化问题的更多相关文章

  1. Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...

  2. struts2中Double类型的转换

    今天做项目,ssh + Extjs,页面js中定义了几个NumberField,对应的value都是double类型的,其中有个NumberField的name为 name,结果执行的时候报错了,说找 ...

  3. JAVA中double类型运算结果异常的解决

    问题: 对两个double类型的值进行运算,有时会出现结果值异常的问题.比如: System.out.println(19.99+20); System.out.println(1.0-0.66); ...

  4. 程序中double类型的数输出为什么要用lf

    在c89和c++中double的输入和输入输出都用%lf 在c99中,double的输出必须用%f,而输入要用%lf oIER一般使用c++,所以输出直接%lf即可.

  5. hbase中double类型数据做累加

    public static Result incr(String tableFullName, String rowKey, String family, String qualifier, long ...

  6. java中double类型显示两个小数,比如12.00

    Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如     0,返回“0.00” ...

  7. 关于java中Double类型的运算精度问题

    标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...

  8. Java中Double类型计算问题

    public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);  ...

  9. 关于java中Double类型的运算精度问题(转)

    Java Java double:浮点数:精确计算  public class Test{    public static void main(String args[]){        Syst ...

  10. Java中Double类型数据比较大小

    方法一:转成字符串之后比较 如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个double数据是否相等.注意这种方法 ...

随机推荐

  1. (微服务)服务治理:熔断器介绍以及hystrix-go的使用

    一.什么是熔断器 要理解熔断器,可以先看看电路中使用的保险丝. 保险丝(fuse)也被称为电流保险丝,IEC127 标准将它定义为"熔断体(fuse-link)".保险丝是一种保证 ...

  2. Flutter——安装依赖包时,出现Waiting for another flutter command to release the startup lock

    问题描述 运行 flutter packages get 时 出现 Waiting for another flutter command to release the startup lock 解决 ...

  3. click模块解析命令行参数

    click模块解析命令行参数 安装 pip install click 操作步骤 1)使用@click.command()装饰一个函数,使之成为命令行接口 2)使用@click.option()等装饰 ...

  4. 【Azure App Service】同一个App Service下创建多个测试站点的方式

    问题描述 在一个App Service中,部署多个应用,每个应用相互独立,类似与IIS中在根目录下创建多个子应用的情况. 问题解答 可以的.通过App Service Configuration页面, ...

  5. JVM内存模式

    Java内存模型即Java Memory Model,简称JMM. JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式.JVM 是整个计算机虚拟模型,所以 JMM 是隶属于 JV ...

  6. Python-Json异常:Object of type Decimal is not JSON serializable

    源起: 使用python分离出一串文本,因为是看起来像整数,结果json转换时发生异常:TypeError: Object of type Decimal is not JSON serializab ...

  7. 6、zookeeper应用场景-分布式唯一ID

    分布式唯一id案例 原理:使用zookeeper有序节点,节点后会加上有序的id,用这个id来当唯一ID 在过去的单库单表型系统中,通常第可以使用数据库字段自带的auto_ increment属性来自 ...

  8. koa 放置 前台打包dist 目录

    const Koa = require('koa'); const app = new Koa() //public是指的放置前端静态资源的文件夹名称 app.use(require('koa-sta ...

  9. 【数据结构】C语言实现动态扩容数组

    // resizable array /* Think about a set of functions that provide a mechanism of resizable array of ...

  10. 多线程系列(十九) -Future使用详解

    一.摘要 在前几篇线程系列文章中,我们介绍了线程池的相关技术,任务执行类只需要实现Runnable接口,然后交给线程池,就可以轻松的实现异步执行多个任务的目标,提升程序的执行效率,比如如下异步执行任务 ...