草庐IT

浮点数二分

全部标签

c++ - 浮点比较的不可再现性

我和我的博士。学生在物理数据分析环境中遇到了一个问题,我可以对此有所了解。我们有代码分析来自LHC实验之一的数据,该实验给出了不可重复的结果。特别是,在同一台机器上运行的相同二进制文件的计算结果可能会因连续执行而异。我们知道不可再现性的许多不同来源,但排除了常见的嫌疑人。当比较两个名义上具有相同值的数字时,我们将问题归结为(double)浮点比较操作的不可再现性。由于分析中的先前步骤,偶尔会发生这种情况。一个例子我们刚刚找到了一个测试数字是否小于0.3的例子(注意我们从不测试浮点值之间的相等性)。事实证明,由于检测器的几何形状,计算有时可能会产生恰好为0.3(或其最接近的double表

c++ - 浮点比较 < 和 >= 生成的汇编中的严重差异

我正在试验生成的程序集并发现了一件有趣的事情。有两个函数在做相同的计算。它们之间的唯一区别是结果相加的方式。#includedoublefunc1(doublex,doubley){doubleresult1;doubleresult2;if(x*x=0.0){result+=x*x+x+y;}if(y*y>=0.0){result+=y*y+y+x;}returnresult*40.0;}x86clang3.7生成的程序集,-O2打开gcc.godbolt.org仍然如此不同和出乎意料。(在gcc上编译产生类似的程序集).LCPI0_0:.quad463082631684371251

c++ - IEEE 浮点标准的 (+0)+(-0) 是什么?

IEEE浮点标准明确定义了对任何float的任何算术运算,我说得对吗?如果是,出于好奇,(+0)+(-0)是什么?有没有办法在实践中用C++或其他常用的编程语言来检查这些事情? 最佳答案 有符号零的IEEE754算术规则声明+0.0+-0.0取决于舍入模式。在默认舍入模式下,它将是+0.0。当向-∞四舍五入时,它将是-0.0。您可以像这样在C++中检查它:#includeintmain(){std::coutOutput:+0.0++0.0==0+0.0+-0.0==0-0.0++0.0==0-0.0+-0.0==-0

c++ - 浮点错误 -1.#J 是什么意思?

最近,有时(很少)当我们从应用程序导出数据时,导出日志包含看起来像“-1.#J”的浮点值。我无法重现它,所以我不知道float在二进制中是什么样子,也不知道VisualStudio如何显示它。我试着查看printf的源代码,但没有找到任何东西(虽然不能100%确定我查看的是正确的版本...)。我试过使用谷歌搜索,但谷歌似乎会丢弃任何#。而且我找不到任何float错误列表。 最佳答案 它可以是负无穷大或NaN(不是数字)。由于字段的格式,printf不区分它们。我在VisualStudio2008中尝试了以下代码:doublea=0.

c++ - 如何调用使用 IDispatch.Invoke 接收浮点值的函数?

我在使用IDispatch.Invoke调用具有浮点参数和浮点结果的函数时遇到问题。这是一个最小的复制:#include#includeintmain(intargc,char*argv[]){CoInitialize(NULL);CComPtrwordapp;if(SUCCEEDED(wordapp.CoCreateInstance(L"Word.Application",NULL,CLSCTX_LOCAL_SERVER))){CComVariantresult;CComVariantcentimeters((float)2.0);CComVariantretval=wordapp.

c++ - OpenCL 浮点精度

我发现OpenCL中主机-客户端float标准存在问题。问题是在x86中编译时,由Opencl计算的float与我的visualstudio2010编译器不在相同的float限制内。但是,在x64中编译时,它们处于相同的限制。我知道它必须与http://www.viva64.com/en/b/0074/有关我在测试期间使用的来源是:http://www.codeproject.com/Articles/110685/Part-1-OpenCL-Portable-Parallelism当我在x86中运行该程序时,当内核和C++程序采用1269760个数字的平方时,它会给我202个相等的数

c - 浮点常量比较 - (0.0 ? 1 : 0)

在下面的示例中,如果取消注释floatf=0.0;,并将return(0.0?1:0);替换为return(f?1:0);。输出为NIL。这是我的代码:/*filemain.cMicrosoft(R)32-bitC/C++OptimizingCompilerVersion15.00.30729.01for80x86cl-W4-MTd-O2-TCmain.c-Fetest*/#includeintmy_func(void){/*floatf=0.0;*/return(0.0?1:0);}intmain(void){printf("%s\n",(my_func()?"ONE":"NIL")

algorithm - 将字符串映射到唯一的 0..1 浮点值,同时保持顺序

我想使用Redis对字符串值进行排序(使用排序集),但我只能为此目的使用float。我正在寻找一种算法来将字符串转换为浮点0..1值,同时保持顺序。我的意思是s1有这样的算法吗?P.S.我将使用这样的算法对用户名进行排序,在大多数情况下,具有匹配分数的玩家会有完全不同的用户名。所以在大多数情况下,这两种方法都应该有效,但仍然存在冲突的空间。另一方面,字符串将被更不正确地排序,如果几乎相同的用户名排序不正确,这是可以接受的。 最佳答案 每个字符都可以映射到它的ASCII数字。如果将每个字符串转换为其等效的float,连接所有ASCII

mysql - Mysql中的最高记录点数

我的table+------+-------+--------+|NAME|MARKS|POINTS|+------+-------+--------+|S1|53|(null)||S2|55|(null)||S3|56|(null)||S4|55|(null)||S5|52|(null)||S6|51|(null)||S7|53|(null)|+------+-------+--------+引用:http://www.sqlfiddle.com/#!2/5d046/1我想给最高分加3,2,1分。这里S3得到3分,S2、S4得到2分,S1、S7得到1分。最终输出看起来,+------

iphone - 如何将货币字符串格式化为浮点值?

我正在获取这样的字符串$2,000.00。现在我想将此字符串更改为浮点值。如何将此字符串转换为float。实际上此字符串($2,000.00)来自使用货币格式化程序格式化数字。但是现在我想将这个字符串更改为浮点值..请为此指导任何人。提前致谢。 最佳答案 考虑字符串。NSString*str=@"$2,000.00";创建一个数字格式化程序。NSNumberFormatter*nf=[[NSNumberFormatteralloc]init];“重要的事情”。[nfsetNumberStyle:NSNumberFormatterCu