C++程序 寻找机器ε
机器ε是ε的最小值,使得1 + ε不等于1。机器ε是一种机器相关的浮点值,它提供了浮点运算中由四舍五入引起的相对误差的上限。数学上,对于每种浮点类型,它等价于1.0和大于1.0的最小可表示值之间的差。
在C中,机器epsilon在标准头文件中被指定为FLT_EPSILON、DBL_EPSILON和LDBL_EPSILON。这三个宏分别给出了浮点、双精度和长双精度类型的机器ε值。
在C++中,类似的宏在标准头文件中也是可用的。在C++中,首选的方法是使用std::numeric_limits::epsilon() – 指定在标准头文件中。
在Java中,它被称为ULP(最后一位单位)。您可以使用java.lang.Math包和Math.ulp()方法找到它。
在Python3中,这些信息在sys.float_info中可用,对应于C99中的float.h。
这是std::numeric_limits::epsilon()的C++等效版本。
>>> import sys
>>> sys.float_info.epsilon
//寻找机器ε的C++程序
#include<iostream>
#include <cfloat>
using namespace std;
//使用一个初始值为EPS的函数
void machineEpsilon(float EPS)
{
//取一个浮点类型的变量
float prev_epsilon;
//执行,直到条件满足
while ((1+EPS) != 1)
{
//将ε的值复制到前一个ε值中
prev_epsilon = EPS;
//除以2
EPS /=2;
}
//输出程序的结果
cout << "机器ε是: " << prev_epsilon << endl;
}
//主程序
int main()
{
//将函数调用计算初始值为0.5的机器ε
machineEpsilon(0.5);
return 0;
}
//寻找机器ε的Java程序
import java.util.*;
class Count{
//使用一个初始值为EPS的函数
public static void machineEpsilon(double EPS)
{
//取一个浮点类型的变量
double prev_epsilon = 0.0;
//执行,直到条件满足
while ((1+EPS) != 1)
{
//将ε的值复制到前一个ε值中
prev_epsilon = EPS;
//除以2
EPS /=2;
}
//输出程序的结果
System.out.print( "机器ε是: "
+ prev_epsilon);
}
public static void main(String[] args)
{
//将函数调用计算初始值为0.5的机器ε
machineEpsilon(0.5);
}
}
# Python程序,求机器精度
# 用一个初始值EPS来计算机器精度
def machineEpsilon(EPS):
# 使用浮点类型变量
# 运行直到满足条件
while ((1+EPS) != 1):
# 将epsilon的值复制
# 给先前的epsilon
prev_epsilon = EPS
# 将epsilon除以2
EPS = EPS / 2
# 打印输出程序
print( "机器精度是:",
prev_epsilon )
# 主函数
# 调用计算机器精度的函数
# 初始值为0.5
machineEpsilon(0.5);
# 本代码由
# "rishabh_jain" 提供。
输出:
机器精度是:1.19209e-07