-
2020-12-02 21:34:21
我正在尝试在
python中评估以下函数:
f(x) = (1 + cos(x))^(1/3)
def eval( i ):
return math.pow( (1 + math.cos( i )), 1/3)
为什么它总是让我回归1?
我正在尝试计算积分的右和左近似,后者应用辛普森的规则,但Python似乎不喜欢那个表达式.
救命?
*完整代码*
import math
min = 0
max = math.pi / 2
n = 4
delta = ( min + max ) / n
def eval( i ):
return math.pow( (1 + math.cos( i )), 1/3)
def right( ):
R = 0
for i in range(1, n+1):
R += eval( i )
return R
def left():
L = 0
for i in range(0, n):
print eval( i )
L += eval( i )
更多相关内容 -
求解立方根
2021-01-14 10:00:22设f(x)=x3-y, 求f(x)=0时的解x,即为y的立方根。根据牛顿迭代思想,xn+1=xn-f(xn)/f'(xn)即x=x-(x3-y)/(3*x2)=(2*x+y/x/x)/3;#include inline double abs(double x){return (x>0?x:-x);}double cubert(const ...99
牛顿迭代法。设f(x)=x3-y, 求f(x)=0时的解x,即为y的立方根。
根据牛顿迭代思想,xn+1=xn-f(xn)/f'(xn)即x=x-(x3-y)/(3*x2)=(2*x+y/x/x)/3;
#include
inline double abs(double x){return (x>0?x:-x);}
double cubert(const double y){
double x;
for(x=1.0;abs(x*x*x-y)>1e-7;x=(2*x+y/x/x)/3);
return x;
}
int main(){
for(double y;~scanf("%lf",&y);printf("%.1lf\n",cubert(y)));
return 0;
}
编辑于 2016-08-12 13:43:08
回复(25)
29
import java.util.*;
public class Main
{
// 使用二分查找算法
public static double getCubeRoot(double input)
{
double min = 0;
double max = input;
double mid = 0;
// 注意,这里的精度要提高一点,否则某些测试用例无法通过
while ((max - min) > 0.001)
{
mid = (max + min) / 2;
if (mid * mid * mid > input)
max = mid;
else if (mid * mid * mid < input)
min = mid;
else
return mid;
}
return max;
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
while (sc.hasNext())
{
double input = sc.nextDouble();
double result = getCubeRoot(input);
System.out.printf("%.1f\n", result);
}
sc.close();
}
}
发表于 2016-08-12 15:20:51
回复(17)
21
命f(x) = x^3 - a,求解f(x) = x^3 - a = 0。
利用泰勒公式展开,即f(x)在xo处的函数值为:
f(x) = f(xo) +f'(xo)(x-xo) = xo^3-a+3xo^2(x-x0) = 0,
解之得:x = xo - (xo^3 - a) / (3xo^2)。 #include
#include
double fun(double n) {
double x = 1.0;
while(fabs(x*x*x - n) > 1e-9)
x = x - ((x*x*x - n) / (3*x*x));
return x;
}
int main() {
int number;
scanf("%d", &number);
double ans = fun(number*1.0);
printf("%.1f", ans);
return 0;
}
求平方根用一个套路@_@:
命f(x) = x^2 - a,求解f(x) = x^2 - a = 0。
利用泰勒公式展开,即f(x)在xo处的函数值为:
f(x) = f(xo) +f'(xo)(x-xo) = xo^2-a+2xo(x-x0) = 0,
解之得:x = (x+a/xo) / 2。
编辑于 2019-03-07 21:48:46
回复(8)
8
采用二分l=1,r=输入数,结束条件是l-r<0.001即可。 #include
using namespace std;
int main(){
int a;
cin>>a;
double l=1,r=a;
double temp;
while((r-l)>0.001){
temp=(l+r)/2;
if(temp*temp*temp>a)r=temp;
else l=temp;
}
printf("%.1lf",temp);
return 0;
}
编辑于 2020-03-20 23:45:29
回复(5)
17
# 牛顿迭代
a = float(raw_input())
e = 0.0001
t = a
while abs(t*t*t - a) > e:
# x(i+1) = x(i) - f(xi)/f(xi)'
t = t - ( t*t*t - a )* 1.0 / (3 * t*t)
print "%.1f" %t
发表于 2016-08-05 23:44:14
回复(1)
4
感觉这个小题确实不需要牛顿出山吧。用查找方式
#include using namespace std;
//查找方式
int main()
{
double dv;
while(cin>>dv){
for(double i=0; i!=dv; i+=1) {
if(i*i*i == dv) {
printf("%0.1f\n", i);
break;
} else if(i*i*i > dv) {
for(double j=i-1; j
if(j*j*j > dv) {
if((j-0.05)*(j-0.05)*(j-0.05) > dv)
printf("%0.1f\n", j-0.1);
else
printf("%0.1f\n", j);
goto _END;
}
}
}
}
_END:
dv=0;
}
}
编辑于 2019-08-09 22:32:17
回复(1)
3
#include
#include
using namespace std;
double gCR(double num);
int main()
{
double num;
cin>>num;
cout<
return 0;
}
double gCR(double num)
{
double x=0; //定义最终要返回的结果
double step = 1; //步长
while(1)
{
//如果将要大于输入值,改变步长
if((x+step)*(x+step)*(x+step)>num)
{
step /= 10;
//不知道为什么至少要有三位小数才能正确四舍五入到一位
//所以这里循环多了一点
if(step == 0.0001)
{
break;
}
continue;
}
x += step;
}
return x;
} 3ms还可以
编辑于 2020-07-16 12:59:41
回复(2)
3
#include
#include
//牛顿法
using namespace std;
double newton(double a){
double x = 1;
while (((x*x*x - a) >= 1e-7) || ((a - x*x*x) >= 1e-7)){
x = (x - x / 3 + a / (3 * x*x));
}
return x;
}
int main(){
double num;
while (cin >> num){
cout << setprecision(1) << fixed << newton(num) << endl;
}
return 0;
}
发表于 2017-06-05 09:37:03
回复(0)
4
#include
#include
#include
using namespace std;
int main()
{
double input;
cout << fixed; //小数点后一位
cout.precision(1);
while (cin >> input) //只考虑正数的情况
cout << (double)exp(1.0 / 3 * log(input)) << endl; //利用指数和对数相结合的思想
return 0;
}
发表于 2016-08-22 22:09:42
回复(3)
2
//二分法
#include
#include
using namespace std;
double getCubeRoot(double start, double end, double input){
double mid = (end+start)/2;
if(mid*mid*mid-input<0.0000001 && mid*mid*mid-input>-0.00000001)
return mid;
if(mid*mid*mid-input>0)
return getCubeRoot(start,mid,input);
return getCubeRoot(mid,end,input);
}
int main(){
double data;
while(cin>>data){
double res = getCubeRoot(0,data,data);
printf("%.1f",res);
}
}
编辑于 2020-02-28 22:58:03
回复(3)
2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNext()) {
double input = cin.nextDouble();
double min = 0;
double max = input;
while(max - min > 0.00001) {
double temp = (min + max) / 2;
if(temp*temp*temp > input) {
max = temp;
} else {
min = temp;
}
}
min*=10;
double small = min - (int)min;
if(small >= 0.5) {
min++;
}
int n = (int)min;
min=(double)n/10;
System.out.println(min);
}
}
}
发表于 2016-03-28 10:24:47
回复(4)
3
求解给定值的立方根:
1、利用Scanner接收键入值。
2、利用牛顿迭代法求解立方根,牛顿迭代求解公式(1)所示,令键入值为y,定义函数
,则本题的迭代公式如(2),直至等式(3)成立停止迭代。
tips: 四舍五入保留1位小数位的做法可以利用String的静态方法format(“%.1f”, x),其中%表示小数点前的位数,1表示保留小数点后1位,f表示转换位float型(找过一下好像没有可以转换为double的)
(1)
(2)
(3)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
while (input.hasNextDouble()){
double num = input.nextDouble();
double x = 1.0;
for (; Math.abs(Math.pow(x,3)-num)>1e-3; x=x-((Math.pow(x,3)-num)/(3*Math.pow(x,2))));
System.out.println(String.format("%.1f", x));
}
}
}
发表于 2020-02-23 16:45:26
回复(1)
12
python one line: import math
print(round(math.pow(int(input()),1/3),1))
编辑于 2017-09-08 10:12:40
回复(5)
3
#include
using namespace std;
int main()
{
double n,m;
cin>>n;
m=pow(n,1.0/3);
printf("%.1f",m);
return 0;
}
发表于 2017-08-17 11:23:37
回复(5)
2
#include
#include
using namespace std;
int main()
{
double d;
double x=10000.0;
cin>>d;
while(abs(x*x*x-d)>0.000001)
{
x=x-(x*x*x-d)/(3*x*x);
}
printf("%.1lf\n",x);
return 0;
} 可以拓展为,求一元3次方程ax^3+bx^2+cx+d=0的解:↓
比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解 #include
#include
using namespace std;
int main()
{
double diedai(double a,double b,double c,double d,double x);
double a,b,c,d;
double x=10000.0;
cout<
cin>>a>>b>>c>>d;
x=diedai(a,b,c,d,x);
cout<
return 0;
}
double diedai(double a,double b,double c,double d,double x)
{
while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001)
{
x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);
}
return x;
}
编辑于 2020-02-27 19:11:52
回复(0)
1
# 牛顿迭代法求解立方根的思路:
# 令f(x) = x^3 - a,求解f(x) = x^3 - a = 0。
# 利用泰勒公式展开,即f(x)在x0处的函数值为:
# f(x) = f(x0) +f'(x0)(x-x0) = (x0^3-a) + (3x0^2)(x-x0) = 0,
# 解之得:x = x0 - (x0^3 - a) / (3x0^2)。
# 即 x = x - ((x*x*x - n) / (3*x*x));
# 拓展:求平方根用一个套路:
# 令f(x) = x^2 - a,求解f(x) = x^2 - a = 0。
# 利用泰勒公式展开,即f(x)在x0处的函数值为:
# f(x) = f(x0) +f'(x0)(x-x0) = (x0^2-a) + 2x0(x-x0) = 0,
# 解之得:x = x0 - (x0^2 - a) / 2x0
# 即 x = x - (x*x-a)/2x 可进一步化简为:=(x+a/x) / 2。
# 总结:
# 平方根与立方根的求解迭代公式:
# 新x = 旧x - f(x)/f'(x)
# 新x = 旧x - (x平方或者立方与输入数a的差)/f(x)求导数
# 法一:牛顿迭代法
a = float(input().strip()) # 获取输入的实数a
e = 0.0001 # 设定一个精度值
t = a # 初始化立方根t的值为输入的值a
while abs(t*t*t - a) > e: # 差值没有达到精度,便一直更新立方根
# x(i+1) = x(i) - f(xi)/f'(xi)
# 更新后的x = 原x - (原x的立方-a)/f(原x)导数
t = t - (t*t*t - a) * 1.0 / (3 * t*t)
print("%.1f" % t) # 当精度达到要求时,此时的立方根t便为输入实数的立方根解。
# 法二:二分法
a = float(input().strip())
epsilon = 0.0001
low = min(-1.0, a)
high = max(1.0, a)
ans = (low + high)/2
while abs(ans**3 - a) >= epsilon:
if ans**3 < a:
low = ans
else:
high = ans
ans = (low + high)/2.0
print('%.1f' % ans)
编辑于 2020-12-25 11:36:13
回复(0)
1
java二分查找
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double target = sc.nextDouble();
double left = 0, right = target, mid;
while(right - left > 0.01){
mid = left + (right - left) / 2;
if(mid * mid * mid < target)
left = mid;
else
right = mid;
}
System.out.printf("%.1f", right);
}
}
发表于 2020-07-28 16:59:33
回复(0)
1
#include
#include
int main()
{
double input;
scanf("%lf",&input);
double low=0,high=input;
double mid = (low+high)/2.0;
while(fabs(input-mid*mid*mid)>0.001)
{
if(mid*mid*mid > input)
{
high = mid;
}else
{
low = mid;
}
mid = (low+high)/2.0;
}
printf("%.1f",mid);
return 0;
}
发表于 2020-07-22 00:20:45
回复(0)
1
工程代码写多了,变笨了,我首先想的是为了稳定,先把特殊情况的处理逻辑写了,然后在根据需求,划分出四种情况,(-∞,-1),(-1,0),(0,1),(1,+∞),然后先用二分法写1到+∞的情况,然后其他情况就是改一下左右边界与更新中间点的逻辑了。
double getCubeRoot(double input)
{
if(input == 0)
return 0;
if(input == 1)
return 1;
if(input == -1)
return -1;
if(input > 1)
{
return getCubeRootGreaterThan1(input);
}
if(input < -1)
{
return getCubeRootSmallerThan_1(input);
}
if((input > 0) && (input < 1))
{
return getCubeRoot01(input);
}
if((input > -1) && (input < 0))
{
return getCubeRoot_10(input);
}
}
#define NUMS (0.0001)
double getCubeRootGreaterThan1(double input)
{
double left,right,middle;
left = 1;
right = input;
start:;
middle = (left + right) / 2;
double temp = middle * middle * middle;
temp = temp - input;
if((temp < NUMS) && (temp > (-NUMS)))
{
return middle;
}
if(temp < 0)
{
left = middle;
goto start;
}
if(temp > 0)
{
right = middle;
goto start;
}
}
发表于 2020-07-20 10:48:44
回复(1)
1
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
try{
double dou = scanner.nextDouble();
System.out.printf("%.1f\n",getCubeRoot(dou,1.0));
//System.out.printf("%.1f\n",getCubeRoot2(dou,0,dou));
}catch(Exception e){
System.out.println("输入类型错误!");
}
}
scanner.close();
}
//方法一:牛顿迭代法
//命f(x) = x^3 - a,求解f(x) = x^3 - a = 0。
//利用泰勒公式展开,即f(x)在xo处的函数值为:
//f(x) = f(xo) +f'(xo)(x-xo) = xo^3-a+3xo^2(x-x0) = 0,
//解之得:x = xo - (xo^3 - a) / (3xo^2)。
public static double getCubeRoot(double target, double Num){
if(Math.abs(Num*Num*Num-target)>1e-9){
Num = Num - (Num*Num*Num-target)/(3*Num*Num);
return getCubeRoot(target,Num);
}
return Num;
}
//方法二:二分查找法
public static double getCubeRoot2(double target, double min, double max){
if((max-min)>1e-9){
double mid = (max+min)/2;
if(mid*mid*mid>target){
return getCubeRoot2(target,min,mid);
}else if(mid*mid*mid
return getCubeRoot2(target,mid,max);
}else{
return mid;
}
}else{
return max;
}
}
}
发表于 2020-07-09 10:32:39
回复(0)
-
Python下的大数求立方根
2021-04-07 19:01:05Python下的大数求立方根 问题来源 test = 64 ** (1./3) print test ---------------- output = 0.3.9999999999999996 产生这种现象的原因是(1/3)先运行得到0.3333333333333333,然后再运行 ** 指数运算 解决办法 ...Python下的大数求立方根
问题来源
test = 64 ** (1./3) print test ---------------- output = 0.3.9999999999999996
产生这种现象的原因是(1/3)先运行得到0.3333333333333333,然后再运行 ** 指数运算
解决办法
- 利用gmpy2
import gmpy2 status = gmpy2.iroot(bignumber, 3)[1] #status为1表示改数能被开立方成整数 rootnumber = gmpy2.iroot(bignumber, 3)[0] #开立方后的结果
- 二分法查找
def find_root(x,n): high = 1 while high ** n <= x: high *= 2 low = high/2 while low < high: mid = (low + high) // 2 if mid**n == x: return mid if low < mid and mid**n < x: low = mid elif high > mid and mid**n > x: high = mid elif low == mid and mid**n < x: low += 1 elif high == mid and mid**n > x: high -= 1 return False message_int = find_root(bignumber, 3) #返回False表明无法开立方成整数,否则为开立方的结果
-
python之求解立方根
2022-06-18 00:22:01python求立方根# -*- coding: UTF-8 -*- # 求解立方根 # 题目描述 # 计算一个数字的立方根,不使用库函数。 # 保留一位小数 # # 输入描述: # 待求解参数,为double类型(一个实数) # 输出描述: # 输入参数的立方根。保留一位小数。 # 示例1 # 输入 # 216 # 输出 # 6.0 # 方案1 n = float(input()) x = 1 while abs(x ** 3 - n) > 1e-7: x = (2 * x / 3) + n / 3 / x / x print round(x, 1) #方案二 number = float(raw_input().strip()) t = 5 while abs(t * t * t - number) > 0.01: t = t - (t * t * t * 0.1 - number * 0.1) / (3.0 * t * t) print "%.1f" % t #方案三 n = float(input()) if n == 0: print(0) if n > 0: sig = 1 else: sig = -1 n = abs(n) if n > 1: start = 0 end = n else: start = n end = 1 mid = (start + end) / 2 while abs(mid ** 3 - n) > 0.001: if mid ** 3 > n: end = mid else: start = mid mid = (start + end) / 2 print(round(sig * mid, 1))
-
python – 如何获得立方根的整数?
2020-12-02 21:34:23我有像125这样的数字,应该返回5的立方根,但Python返回4.99999例:>>> 125 ** (1.0/3.0)4.999999999999999这是我的代码:processing = Truen = 12000while processing:if (n ** (1.0/3.0)).is... -
python 二分查找(立方根)
2020-12-02 21:34:21二分查找,以1/2的循环切割有效值域,在有效值域内部搜索需求对象,注意: 所搜索值必须在有效值域内,以下为例立方公式: x^3 = y立方根:1)x > 1时,x <= y,值域在 (x,y)内2)0< x <1时,x>y值域在... -
用Python求某数的立方根-牛顿迭代法
2020-06-20 19:29:13首先了解什么是牛顿迭代法。 太多公式符号了,这个编辑器打出来能累死人。直接上手写图。 -
python求一个数字的立方根,保留一位小数
2020-12-20 09:44:16代码 num = float(input()) x = 1 while abs(x**3-num) > 1e-7: # abs计算绝对值;le-7等于0.0000001,用来保证计算的精度 x = (2*x/3)+num/3/x/x print(round(x, 1)) # 保留一位小数,四舍五入 ... -
python 二分法和牛顿法 求立方根
2020-03-23 00:48:35过点 做曲线 的切线,并求该切线与 轴交点的横坐标 ,称 为 的二次近似解。重复以上过程,得 的近似值序列,其中, 称为 的 次近似值,上式称为牛顿迭代公式。 用牛顿迭代法解非线性方程,是把非线性方程... -
python开立方函数_Python | 编写函数以查找给定数字的平方和立方
2020-06-24 23:34:52python开立方函数Given a number, and we have to write user defined functions to find the square and cube of the number is Python. 给定一个数字,我们必须编写用户定义的函数来查找数字的平方和立方是Python... -
利用二分查找求实数立方根(python)
2021-11-23 23:47:00二分查找的概念与条件 立方根求解 1.大于一 2.为负数 3.在0到1之间 附录:epsilon的精度问题 如何让代码更优美 -
python环境下使用牛顿迭代法求任意实数立方根
2019-06-11 14:15:01要求如下图所示,编程环境为python 3.7.3 windows 32版本 一、什么是牛顿迭代法? 百度百科上说是这样 https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580?fr=aladdin ... -
牛客网 python 求解立方根
2018-11-09 16:56:00•计算一个数字的立方根,不使用库函数 详细描述: •接口说明 原型: publicstaticdoublegetCubeRoot(doubleinput) 输入:double待求解参数 返回值:double输入参数的立方根,保留一位小数 牛顿迭代法:之前... -
Python求解平方根的方法
2020-11-29 10:45:20Python求解平方根的方法本文实例讲述了Python求解平方根的方法。分享给大家供大家参考。具体如下:主要通过SICP的内容改写而来。基于newton method求解平方根。代码如下:#!/usr/bin/pythondef sqrt_iter(guess,x):... -
Python,计算立方根。编写程序输出1-100内的所有合数之和的立方根。
2022-03-04 22:57:43计算立方根。...参考流程如下: (a)编写函数判断一个数字是不是合数; (b)循环判断1-100的数字是不是合数,如果是合数就累加; (c)对上述累加的结果进行求和; (d)求累加结果的平方根,保留3位小数。 -
python如何求平方
2021-01-28 15:12:34用python就可以啦,那么python如何求平方呢?一起来了解下吧:python如何求平方1.计算乘方pow(4,3)# 结果642.计算平方import numpynumpy.square(4)# 结果16pow(5,2)#结果253.平方根import numpynumpy.sqrt(16)# 结果... -
Python 函数嵌套
2021-02-01 19:00:30C语言中不能在函数里面嵌套定义函数,但是在MATLAB和Python中可以在函数内部定义函数,下面用实例来说明。 编写一个计算立方根的函数,由一个递推公式,给定精度,计算满足精度要求的立方根。 def rt(x): if x ==... -
python怎么求一个数的平方根
2020-11-24 10:54:35在python中求一个数的平方根可以使用math模块,或者使用内置模块pow函数,还可以使用数学表达式,用两个**0.5表示。例如# -*- coding: UTF-8 -*-# Filename : test.py# author by : www.runoob.comnum = float(input... -
【华为机试】求解立方根(牛顿迭代法)
2020-12-22 10:46:11先分享马同学的科普,深入浅出,很容易理解。... 题目描述•计算一个数字的立方根,不使用库函数详细描述:•接口说明原型:publicstaticdoublegetCubeRoot(doubleinput)输入:double待求解参数返回值:double输入参数... -
【机试题(实现语言:python3)】求解立方根
2021-05-21 22:01:392、利用牛顿迭代法求解立方根,牛顿迭代求解公式(1)所示,令键入值为y,定义函数,则本题的迭代公式如(2),直至等式(3)成立停止迭代。 tips: 四舍五入保留1位小数位的做法可以利用String的静态方法format(“%.1f”,... -
立方根求解(牛顿迭代法)
2020-11-21 03:36:18计算一个数字的立方根,不使用库函数详细描述:接口说明原型:public static double getCubeRoot(double input)输入:double 待求解参数返回值:double 输入参数的立方根输入描述:待求解参数 double类型输出描述:输入... -
Cube-root:查找数字的立方根的算法
2021-04-14 13:20:49查找数字的立方根 这可以使用三个方法来实现 1.猜猜并检查 检查每个猜测以确认它是正确的多维数据集根。 此方法只能用于找到理想立方体的立方体根。 2.近似值 这给出了一个足够好的解决方案,一个足够接近多维数据集... -
对python中不同模块(函数、类、变量)的调用详解
2020-12-05 05:46:31对python中不同模块(函数、类、变量)的调用详解首先,先介绍两种引入模块的方法。法一:将整个文件引入import 文件名文件名.函数名( ) / 文件名.类名通过这个方法可以运行另外一个文件里的函数法二:只引入某个文件... -
题目1166:迭代求立方根
2017-07-28 19:57:17时间限制:1 秒 内存限制:32 兆 特殊判题:否 ...立方根的逼近迭代方程是 y(n+...求给定的x经过n次迭代后立方根的值。 输入: 输入有多组数据。 每组一行,输入x n。 输出: 迭代n次后的立方根, -
Python学习-Scipy库模块介绍(物理常量表示、逻辑回归、求立方根)
2020-11-16 11:09:162)求立方根 1、Scipy库的简单介绍 Scipy是一个高级科学计算库,主要有以下子模块: spcial: 特殊数学函数; io: 数据输入输出; linalg: 线性代数; stats: 统计 integrate: 积分; spatial: 空间算法和数据结构; ... -
Python numpy.histogram_bin_edges函数方法的使用
2020-12-11 06:09:39numpy.histogram_bin_edgesnumpy.histogram_bin_edges(a, bins=10, range=None, weights=None) [source]仅计算histogram函数使用的bin边缘的函数。参数 :a :array_like输入数据。直方图是在展平的数组上计算的。... -
ArcGIS字段计算器中的python函数(转发)
2019-05-14 16:21:02For example,fmod(-1e-100,1e100) is -1e-100, but the result of Python’s-1e-100%1e100 is 1e100-1e-100, which cannot be represented exactly as a float, and rounds to the surprising1e100. For this ...