C++ 中 double 类型 0 和 –0 的运算

C++ 的 double 是有负零(negative zero)的。负零在某些计算中是有意义的。例如:

1.0/0.0 == INFINITY
1.0/-0.0 == –INFINITY

除此之外,负零在某些数学函数中也有利用,例如 sqrt(std::complex)

同时零和负零的加减计算也有它的特殊性,例如下面的代码:

#include <iostream>
int main()
{
	double a(1.0), b(0.0), c(-0.0);
	std::cout << std::hex;
	std::cout << "a = " << a << std::endl;
	std::cout << "b = " << b << std::endl;
	std::cout << "c = " << c << std::endl;

	std::cout << "作为除数" << std::endl;
	std::cout << a << " / " << b << " = " << a / b << std::endl;
	std::cout << a << " / " << c << " = " << a / c << std::endl;

	std::cout << "加法" << std::endl;
	std::cout << a << " + " << c << " = " << a + c << std::endl;
	std::cout << b << " + " << c  << " = " << b + c << std::endl;
	std::cout << c << " + " << c << " = " << c + c << std::endl;

	std::cout << "减法" << std::endl;
	std::cout << a << " - " << c << " = " << a - c << std::endl;
	std::cout << b << " - " << c << " = " << b - c << std::endl;
	std::cout << c << " - " << b << " = " << c - b << std::endl;
	std::cout << c << " - " << c << " = " << c - c << std::endl;

	std::cout << "乘法" << std::endl;
	std::cout << a << " * " << c << " = " << a * c << std::endl;
	std::cout << b << " * " << c << " = " << b * c << std::endl;
	std::cout << c << " * " << c << " = " << c * c << std::endl;

	std::cout << "除法" << std::endl;
	std::cout << b << " / " << b << " = " << b / b << std::endl;
	std::cout << b << " / " << c << " = " << b / c << std::endl;
    return 0;
}

这段代码在 VS2015 中编译运行的结果为:

从结果中可以看出零和负零的各种运算结果。

时间: 2024-10-17 08:41:37

C++ 中 double 类型 0 和 –0 的运算的相关文章

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

Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 二: new java.text.DecimalFormat("#.00").format(3.1415926) 三: double d = 3.1415926

Average-计算文件中double类型数字的平均数

Average-计算文件中double类型数字的平均数: //Average-计算文件中double类型数字的平均数 #include<iostream> #include<fstream> #include<cstdlib> int main() { using namespace std; ifstream fin; ofstream fout; double tem,sum,aver; int count = 0; fin.open("numbers.d

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

标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.

struts2中Double类型的转换

今天做项目,ssh + Extjs,页面js中定义了几个NumberField,对应的value都是double类型的,其中有个NumberField的name为 name,结果执行的时候报错了,说找不到setName(String name)方法,可我分明写了get和set方法:setName(double name),奇怪,为什么是setName(String name)?原来问题出在struts上,struts自带的类型转换机制将double类型的数值用string转换了,当然出问题了.

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

Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如     0,返回"0.00": 提示:DecimalFormat       df       =       new       DecimalFormat( "#####0.00 ");                       System.out.println(df.format(d)

Java中double类型与String 类型之间的互相转换

Java中String类型和double类型之间的转换 我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需要一个日期类型,反过来,在页面上显示的时候,需要从数据库获取出生日期,此时该类型为日期类型,然后需要将该日期类型转为字符串显示在页面上,Java的API中为我们提供了日期与字符串相互转运的类DateForamt.DateForamt是一个抽象类,所以平时使用的是它的子类SimpleDateFor

hbase中double类型数据做累加

public static Result incr(String tableFullName, String rowKey, String family, String qualifier, long amount) throws IOException { Table table = HBaseConnectionFactory.getConnection().getTable(TableName.valueOf(tableFullName)); Increment increment = n

MySQL中varchar类型在5.0.3后的变化

1.mysql varchar类型变化:mysql 5.0.3 之前: 0--255字节 varchar(20)中的20表示字节数,如果存放urf8编码的话只能放6个汉字. MySQL 5.0.3 之后: 0--65535字节 varchar(20)表示字符数,不管什么编码,既汉字也能放20个.但最多占65532字节(两个字节存放长度,小于255字节用1个字节存放长度) 1.存储限制: varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需

如何使java中double类型不以科学计数法表示

在java中,把一个double或者BigDecimal的小数转换为字符串时,经常会用科学计数法表示,而我们一般不想使用科学计数法,可以通过:DecimalFormat a = new DecimalFormat("#,##0.00000000");        System.out.println(a.format(11111111.0000001000000001));的方式来格式化输出字符串. 对于BigDecimal的小数,如果制定精度<=6, 则可以放心的使用其toS