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

本文深入探讨了C++中double类型的负零概念及其在运算中的特殊性,包括除法、加减法、乘法和比较运算,并通过代码示例展示了负零在实际编程中的应用。

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 中编译运行的结果为:

428

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

转载于:https://www.cnblogs.com/chenjiafeng/p/5444679.html

### C++ 中 `double` 类型的取余运算方法 在 C++ 中,虽然 `%` 运算符仅适用于整数类型,但可以通过标准库中的 `<cmath>` 提供的函数 `fmod()` 来实现双精度浮点数 (`double`) 的取余运算。以下是关于此主题的具体说明: #### 使用 `fmod()` 实现 `double` 类型的取余运算 C++ 标准库提供了 `fmod()` 函数用于计算两个浮点数之间的余数[^2]。其定义如下: ```cpp double fmod(double numerator, double denominator); ``` 该函数接受两个参数:分子(`numerator`)分母(`denominator`),并返回它们相除后的余数值。 需要注意的是,`fmod(x, y)` 返回的结果满足以下条件: - 结果具有与 `x` 相同的符号; - 绝对值小于 `y` 的绝对值。 下面是一个简单的例子展示如何使用 `fmod()` 对 `double` 类型执行取余操作: ```cpp #include <iostream> #include <cmath> // 包含 fmod 定义 int main() { double num1 = 9.5; double num2 = 3.2; double result = fmod(num1, num2); std::cout << "The remainder of " << num1 << " divided by " << num2 << " is: " << result << std::endl; return 0; } ``` 运行以上程序会输出类似于这样的结果: ``` The remainder of 9.5 divided by 3.2 is: 0.7 ``` #### 关于负数的情况 当涉及负数时,`fmod()` 的行为不同于某些其他编程语言(如 Python)。具体来说,如果被除数为负,则结果也为负;而无论何时只要除数为正,最终得到的余数也会保持较小的正值范围内的负值形式[^4]。例如: ```cpp std::cout << fmod(-9.5, 3.2) << "\n"; // 输出约为 -3.1 std::cout << fmod(9.5, -3.2) << "\n"; // 输出约为 0.7 std::cout << fmod(-9.5, -3.2) << "\n"; // 输出约为 -3.1 ``` 综上所述,在处理需要精确控制浮点数之间求模场景下推荐采用 `fmod()` 方法完成相应功能需求。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值