C++中的取余函数%、remainder、fmod以及matlab中的取余函数mod

news2024/11/29 6:28:10

C++

1 整数取余

%

2 remainder函数

https://cplusplus.com/reference/cmath/remainder/?kw=remainder

double remainder (double numer , double denom);
float remainder (float numer , float denom);
long double remainder (long double numer, long double denom);
double remainder (Type1 numer , Type2 denom); // additional overloads

Returns the floating-point remainder of numer/denom (rounded to nearest):

remainder = numer - rquot * denom

Where rquot is the result of: numer/denom, rounded toward the nearest integral value (with halfway cases rounded toward the even number).

A similar function, fmod, returns the same but with the quotient truncated (rounded towards zero) instead.
The function remquo has a behavior identical to this function, but it additionally provides access to the intermediate quotient value used.

Additional overloads are provided in this header () for other combinations of arithmetic types (Type1 and Type2): These overloads effectively cast its arguments to double before calculations, except if at least one of the arguments is of type long double (in which case both are casted to long double instead).

Parameters

numer: Value of the quotient numerator.
denom: Value of the quotient denominator.

Return Value
The remainder of dividing the arguments.
If this remainder is zero, its sign shall be that of numer.
If denom is zero, the function may either return zero or cause a domain error (depending on the library implementation).

If a domain error occurs:

  • And math_errhandling has MATH_ERRNO set: the global variable errno is set to EDOM.
  • And math_errhandling has MATH_ERREXCEPT set: FE_INVALID is raised.

Example

/* remainder example */
#include <stdio.h>      /* printf */
#include <math.h>       /* remainder */

int main ()
{
  printf ( "remainder of 5.3 / 2 is %f\n", remainder (5.3,2) );
  printf ( "remainder of 18.5 / 4.2 is %f\n", remainder (18.5,4.2) );
  return 0;
}

Output:

remainder of 5.3 / 2 is -0.700000
remainder of 18.5 / 4.2 is 1.700000

3 fmod函数

https://cplusplus.com/reference/cmath/fmod/?kw=fmod

double fmod (double numer , double denom); float fmod (float numer , float denom);long double fmod (long double numer, long double denom); double fmod (Type1 numer , Type2 denom); // additional overloads

Compute remainder of division
Returns the floating-point remainder of numer/denom (rounded towards zero):

fmod = numer - tquot * denom

Where tquot is the truncated (i.e., rounded towards zero) result of: numer/denom.

A similar function, remainder, returns the same but with the quotient rounded to the nearest integer (instead of truncated).

Additional overloads are provided in this header () for other combinations of arithmetic types (Type1 and Type2): These overloads effectively cast its arguments to double before calculations, except if at least one of the arguments is of type long double (in which case both are casted to long double instead).

Parameters

numer Value of the quotient numerator. denom Value of the quotient
denominator.

Return Value
The remainder of dividing the arguments.
If denom is zero, the function may either return zero or cause a domain error (depending on the library implementation).

C90 (C++98)C99 (C+11)
If a domain error occurs:

  • And math_errhandling has MATH_ERRNO set: the global variable errno is set to EDOM.
  • And math_errhandling has MATH_ERREXCEPT set: FE_INVALID is raised.

Example

/* fmod example */
#include <stdio.h>      /* printf */
#include <math.h>       /* fmod */

int main ()
{
  printf ( "fmod of 5.3 / 2 is %f\n", fmod (5.3,2) );
  printf ( "fmod of 18.5 / 4.2 is %f\n", fmod (18.5,4.2) );
  return 0;
}

Output:

fmod of 5.3 / 2 is 1.300000
fmod of 18.5 / 4.2 is 1.700000

自编remainder及fmod

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
//VS2010不提供remainder这个函数,自己实现
//http://www.cplusplus.com/reference/cmath/remainder/
//Returns the floating - point remainder of numer / denom(rounded to nearest) :
//remainder = numer - rquot * denom
//Where rquot is the result of : numer / denom, rounded toward the nearest integral value(with halfway cases rounded toward the even number).
//A similar function, fmod, returns the same but with the quotient truncated(rounded towards zero) instead.
#define ROUND(d)  int(d + 0.5)//四舍五入
double myremainder(double numer, double denom)
{
	//如果一正一负,这个函数结果可能不对
	int rquot = ROUND(numer / denom);//remainder和fmod的区别就是要不要四舍五入
	double remainder = numer - rquot * denom;
	return remainder;
}

double myfmod(double x, double y)
{
	return x - (int)(x / y) * y;
}

int main()
{
	double x, y;
	x = 14.3;
	y = 3.0;
	printf("x = %f, y = %f\n", x, y);
	printf("remainder(x, y) = %f\n", remainder(x, y)); // 计算余数,四舍五入到最接近的整数
	printf("myremainder(x, y) = %f\n", myremainder(x, y)); // 计算余数,四舍五入到最接近的整数
	printf("fmod(x, y) = %f\n", fmod(x, y)); // 计算余数,向零取整
	printf("myfmod(x, y) = %f\n", myfmod(x, y)); // 计算余数,向零取整

	x = -14.3;
	y = 3.0;
	printf("x = %f, y = %f\n", x, y);
	printf("remainder(x, y) = %f\n", remainder(x, y)); // 计算余数,四舍五入到最接近的整数
	printf("myremainder(x, y) = %f\n", myremainder(x, y)); // 计算余数,四舍五入到最接近的整数
	printf("fmod(x, y) = %f\n", fmod(x, y)); // 计算余数,向零取整
	printf("myfmod(x, y) = %f\n", myfmod(x, y)); // 计算余数,向零取整

	x = 14.3;
	y = -3.0;
	printf("x = %f, y = %f\n", x, y);
	printf("remainder(x, y) = %f\n", remainder(x, y)); // 计算余数,四舍五入到最接近的整数
	printf("myremainder(x, y) = %f\n", myremainder(x, y)); // 计算余数,四舍五入到最接近的整数
	printf("fmod(x, y) = %f\n", fmod(x, y)); // 计算余数,向零取整
	printf("myfmod(x, y) = %f\n", myfmod(x, y)); // 计算余数,向零取整

	x = -14.3;
	y = -3.0;
	printf("x = %f, y = %f\n", x, y);
	printf("remainder(x, y) = %f\n", remainder(x, y)); // 计算余数,四舍五入到最接近的整数
	printf("myremainder(x, y) = %f\n", myremainder(x, y)); // 计算余数,四舍五入到最接近的整数
	printf("fmod(x, y) = %f\n", fmod(x, y)); // 计算余数,向零取整
	printf("myfmod(x, y) = %f\n", myfmod(x, y)); // 计算余数,向零取整


	system("pause");
}

输出结果
在这里插入图片描述

matlab中的mod函数

涉及到正负数问题时和C++中的remainder以及fmod都不一样,原理之后再写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文带你了解MySQL之单表访问方法

前言 本文章收录在MySQL性能优化原理实战专栏&#xff0c;点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的&#xff1a;从根儿上理解MySQL》 对于我们这些MySQL的使用者来说&#xff0c;MySQL其实就是一个软件&#xff0c;平时用的最多的就是查询功…

Grow模型

Grow模型 该模型是约翰.惠特默&#xff0c;在1992年其著作《高绩效教练》一书中提出的&#xff0c;核心是围绕设定目标和寻找解决方案的有效工具。 模型介绍 GROW模型给到应用者一个可以高效的设立目标并制定计划&#xff0c;最终解决问题的思路框架。 GROW 由四个步骤构成&am…

老胡的周刊(第091期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 omnivore[2] 无干扰、注重隐私、免费开源专为…

【P26】JMeter WebSocket Sampler

文章目录 一、WebSocket Sampler 安装说明二、WebSocket Sampler 参数说明三、测试计划设计 一、WebSocket Sampler 安装说明 下载路径&#xff1a;https://jmeter-plugins.org/install/Install/ &#xff08;1&#xff09;、打开网页&#xff0c;点击 plugins-manager.jar 进…

​C++中虚函数 纯虚函数 虚基类的基础知识点​

一、前言 原文转载自 c中的 虚函数 纯虚函数 虚基类_名字全都被占用了的博客-CSDN博客&#xff0c;为了理解下C中虚函数 纯虚函数 虚基类的基础知识点。 二、虚函数 纯虚函数 虚基类三者区别 1.虚函数是用于多态中virtual修饰父类函数&#xff0c;确保父类指针调用子类对…

Maven基础学习---4、Maven的使用(IDEA)

1、创建父工程&#xff08;本人用的是IDEA2022.3&#xff09; 1、创建Project 2、配置Maven信息 如果没有提前设置过Setting for new project这个配置&#xff0c;那么每次创建Project后都需要设置Maven家目录位置&#xff0c;否则IDEA将使用内置的Maven核心程序&#xff08;…

数据仓库理论

数据仓库理论 基础理论数据仓库主要特征面相主题集成性非易失性、非易变性时变性 OLTP、OLAPOLTPOLAP对比 数据库与数据仓库的区别数据仓库、数据集市数据仓库分层架构分层思想和标准阿里巴巴数仓三层架构ODS层DW层DA层&#xff08;ADS层&#xff09; 分层的好处好处 ETL和ELT的…

mysql存储过程实例统计最大销售数量

1.需求 统计某天的销售的商品中&#xff0c;数量大于m的最大的销售数量。 传入参数&#xff1a;销售日期&#xff0c;销售数量 返回参数&#xff1a;最大销售数量 2.数据库表 销售表 CREATE TABLE t_sale ( id int NOT NULL COMMENT ‘主键’, good_id int NULL COMMENT ‘…

[山海关crypto 训练营 day17]

[HNCTF 2022 WEEK3]pnearq 题目代码和数据 from Crypto.Util.number import * from gmpy2 import next_prime from flag import flagp getPrime(1024) q next_prime(p) n p*q e 0x10001 c pow(bytes_to_long(flag), e, n) print(f"n {n}") print(f"c {…

chatgpt赋能Python-python8_9

Python 8-9: 了解更多关于Python的新特性 Python 作为一种高级编程语言已经被广泛应用于数据科学&#xff0c;Web开发&#xff0c;人工智能等领域。Python 8-9带来了新特色的更新和改进&#xff0c;这些功能使得Python更加强大和易于使用&#xff0c;吸引了越来越多开发者的关…

符尧最新研究:大语言模型玩砍价游戏?技巧水涨船高!

深度学习自然语言处理 原创作者&#xff1a;鸽鸽 若干年前&#xff0c;AlphaGo Zero用两个AI代理切磋围棋技艺&#xff0c;打败了人类。今早&#xff0c;符尧的一篇论文刷新了我的认知&#xff1a;让大语言模型相互对弈&#xff0c;再加一个评论家提供建设性意见&#xff0c;提…

自动控制原理备考-1题-传递函数

首先致敬西北工业大学自动控制原理的无冕之王张科老师。 期末考试&#xff0c;先下手为强&#xff0c;后下手遭殃。今天我们就开始一起针对期末考试有关题型一一梳理&#xff0c;突破解决。 给你一个系统结构图&#xff0c;让你求R&#xff08;s)和N(s)同时作用下的C(s)。基本…

机器学习项目实战-能源利用率 Part-5(模型解释)

博主前期相关的博客可见下&#xff1a; 机器学习项目实战-能源利用率 Part-1&#xff08;数据清洗&#xff09; 机器学习项目实战-能源利用率 Part-2&#xff08;探索性数据分析&#xff09; 机器学习项目实战-能源利用率 Part-3&#xff08;特征工程与特征筛选&#xff09; 机…

匿名通信 Windows 客户端的设计与实现

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本课题基于 U-TRI 匿名通信系统&#xff0c;设计一个 Windows 匿名通信客户端。该客户端在匿名通信系统中扮演了重要角色&#xff0c;实现了两个重要功能&#xff1a;第一&#xff0c;实现匿名通信协议&#xff0c;拦截/修改主…

TCP 三次握手与四次挥手

1 三次握手 三次握手的过程如下图&#xff1a; 一开始&#xff0c;客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口&#xff0c;处于 LISTEN 状态 客户端会随机初始化序号&#xff08;client_isn&#xff09;&#xff0c;将此序号置于 TCP 首部的「序号」字段中…

如何在 iPhone 上恢复已删除的应用程序数据

您是不小心删除了重要应用程序并且似乎无法在您的设备上找到它的 iPhone 用户吗&#xff1f;别担心&#xff0c;你并不孤单。在 iPhone 上丢失应用程序可能会令人沮丧&#xff0c;但幸运的是&#xff0c;有一些方法可以恢复它们。在本文中&#xff0c;我们将通过分步说明向您展…

你真的懂Java中的Cloneable接口和深拷贝么?

Cloneable接口 和 深拷贝 &#x1f490;文章导读 这篇文章就为大家讲讲什么是Cloneable接口&#xff0c;接口的用法以及什么是深拷贝和浅拷贝&#xff0c;如果有不足的地方&#xff0c;还望读者在评论区提出&#xff01;&#xff01;&#xff01; 上篇文章讲过用Comparable接口…

单模光纤的特征方程以及MATLAB求解

在之前的文章中&#xff0c;我们写出了单模光纤的特征方程以及对应的导波模式 这里我们在MATLAB中求解特征方程并表示出几个归一化参数的变化曲线 用到的公式是单模光纤导波模式的特征方程&#xff1a; clear close all tic Vmax 10; N 100;for j 1:NV(j) j/N*Vmax;Vtemp …

电脑微信占用100多GB空间 解决办法来了:重回清爽流畅

这几天微信吃内存的话题又上热搜了&#xff0c;作为一款10亿用户的国民级APP&#xff0c;微信的真是让人又爱又恨&#xff0c;不用几乎不可能&#xff0c;用起来槽点又多&#xff0c;光是磁盘占用就是个头疼的问题。 不论是工作还是日常沟通&#xff0c;微信里面的文件及语音、…

python中的类型转换

文章目录 类型转换简介int()float()str()bool() 类型转换简介 所谓的类型转换&#xff0c;将一个类型的对象转换为其他对象。 类型转换不是改变对象本身的类型&#xff0c;而是将对象的值转换为新的对象。 类型转换四个函数 int() 、 float() 、 str() 、 bool() int() int()…