jjzjj

precision

全部标签

c++ - 显然相同的数学表达式具有不同的输出

以下代码将在x8632位机器上为变量“e”和“f”输出不同的结果,但在x8664位机器上输出相同的结果。为什么?理论上相同的表达式正在被评估,但技术上它不是。#includemain(){doublea,b,c,d,e,f;a=-8988465674311578540726.0;b=+8988465674311578540726.0;c=1925283223.0;d=4294967296.0;e=(c/d)*(b-a)+a;printf("%.80f\n",e);f=c/d;f*=(b-a);f+=a;printf("%.80f\n",f);}注意...可以使用“gcc-m32”生成3

c++ - 查找浮点类型可以在不损失精度的情况下处理的最大整数大小

Double的范围大于64位整数,但由于其表示形式,其精度较低(因为double也是64位,它不能容纳更多的实际值)。因此,当表示较大的整数时,您会开始失去整数部分的精度。#include#includetemplatevoidmaxint_to_double(){Ti=std::numeric_limits::max();TFloatd=i;std::cout();maxint_to_double();maxint_to_double();return0;}这打印:21474836472147483647.000000922337203685477580792233720368547

c++ - Gotw 67 中的一个例子

http://www.gotw.ca/gotw/067.htm中有一个例子intmain(){doublex=1e8;//floatx=1e8;while(x>0){--x;}}当你把double改成float时,在VS2008中就是一个无限循环。根据Gotw的解释:Whatiffloatcan'texactlyrepresentallintegervaluesfrom0to1e8?Thenthemodifiedprogramwillstartcountingdown,butwilleventuallyreachavalueNwhichcan'tberepresentedandforw

c++ - 使用 boost lib 的更高精度 float (高于 16 位数字)

我正在运行物理实验模拟,因此我需要非常高的浮点精度(超过16位)。我使用Boost.Multiprecision,但是无论我尝试什么,我都无法获得高于16位的精度。我使用C++和eclipse编译器运行模拟,例如:#include#include#include#includeusingboost::multiprecision::cpp_dec_float_50;voidmain(){cpp_dec_float_50my_num=cpp_dec_float_50(0.123456789123456789123456789);std::cout.precision(std::numer

c++ - x86-64 长 double

longdouble在Intel64位平台上的实际精度是多少?是80位填充到128位还是实际的128位?如果是前者,除了gmp之外,还有其他选择可以实现真正的128精度吗? 最佳答案 x86-64精度与常规x86相同。扩展double为80位,使用x87ISA,添加了6个填充字节。没有128位FP硬件。不过,四精度或扩展四精度的软件实现可能会受益于x86-6464x64=>128整数乘法指​​令。 关于c++-x86-64长double,我们在StackOverflow上找到一个类似的问

c++ - 管理 C++ 单精度和 double 混合计算的规则是什么?

例如,这些变量:result(double)a(double)b(float)c(float)d(double)一个简单的计算:result=a*(b+c)*d如何以及何时转换类型以及如何确定每次计算执行的精度? 最佳答案 所有操作都是在相同类型的对象上完成的(假设是正常的算术运算)。如果您编写的程序使用不同的类型,那么编译器将自动升级ONE参数,使它们相同。在这种情况下,花车将升级为double:result=a*(b+c)*dfloattmp1=b+c;//Plusoperationdoneonfloats.//Sotheres

c++ - 除 double 时意外的精度损失

我有一个函数getSlope,它以4个double作为参数,并返回另一个使用给定参数按以下方式计算的double:doubleQSweep::getSlope(doublea,doubleb,doublec,doubled){doubleslope;slope=(d-b)/(c-a);returnslope;}问题是,当使用参数调用这个函数时,例如:getSlope(2.71156,-1.64161,2.70413,-1.72219);返回结果为:10.8557这对我的计算来说不是一个好的结果。我已经使用Mathematica计算了斜率,相同参数的斜率结果是:10.8452或为了精确而

c++ - C - 打印浮点值

我有一个C++程序,它接收值并像这样打印出值:getline(in,number);cout我有一个等效的C程序,它接收值并像这样打印出来:fscanf(rhs,"%e",&number);printf("%lf\n",number);但是当C++程序打印出0.30951时,C程序打印出0.309510。更多示例:C++:0.0956439C:0.095644。只要值是7位长,它似乎打印相同的结果,但如果它比7位短,它会在末尾添加一个额外的0。如果它的长度超过7位,则向下舍入为6位。我希望C结果与C++程序匹配。任何帮助将不胜感激。谢谢。注意:数字是一个float,数字是从文件中读取的

机器学习:性能度量——Precision,Recall,F1_score(Python)

importpandasaspdfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerfromsklearn.linear_modelimportLogisticRegressionfromsklearnimportmetricsimportmatplotlib.pyplotaspltfromsklearn.metricsimportclassification_report,ConfusionMatrixDis

iOS:限制数据类型 "double"的精度而不转换为 NSString

我想问一下double如何处理它们的精度。我创建了一个示例,其中输入了如下double值:doubled=2.0126161;doubled1=2.0126162;doubled2=2.0126163;doubled3=2.0126164;doubled4=2.0126165;当前输出:如果我设置断点并通过在lldb中运行“po”命令进行检查,则值显示如下:(lldb)pod2.0126160999999998(lldb)pod12.0126162000000001(lldb)pod22.0126162999999999(lldb)pod32.0126164000000002(lldb