草庐IT

浮点数

全部标签

java - 与 NaN 不同,为什么浮点无穷大是相等的?

为什么无限比较不遵循应用于NaN的逻辑?此代码打印出false三次:doublea=Double.NaN;doubleb=Double.NaN;System.out.println(a==b);//falseSystem.out.println(ab);//false但是,如果我将Double.NaN更改为Double.POSITIVE_INFINITY,我得到true表示相等,但false用于大于和小于比较:doublea=Double.POSITIVE_INFINITY;doubleb=Double.POSITIVE_INFINITY;System.out.println(a==b

node.js - MongoDB:按地理位置给定区域和最大点数的集群文档?

关闭。这个问题需要更多focused.它目前不接受答案。想改善这个问题吗?更新问题,使其仅关注一个问题editingthispost.5年前关闭。Improvethisquestion我正在尝试基于包含以下文档的MongoDB集合开发基于map的可视化,其中包括子群的“热图”:{"PlaceName":"Boston","Location":{"type":"Point","coordinates":[42.358056,-71.063611]},"Subpopulations":{"Age":{"0_4":37122,"6_11":33167,"12_17":35464,"18_24

c++ - 比较从字符串转换的浮点值与文字

这不是著名的Isfloatingpointmathbroken的复制品,即使第一眼看上去很像。我正在使用fscanf(file,"%lf",&value);从文本文件中读取double并将其与==进行比较运算符针对双字面值。如果字符串与文字相同,那么使用==的比较是否在所有情况下都是true?示例文本文件内容:7.7代码片段:doublevalue;fscanf(file,"%lf",&value);//reading"7.7"fromfileintovalueif(value==7.7)printf("strictlyequal\n");预期和实际输出是strictlyequal但这

c++ - 为什么在浮点文字的末尾添加 0 会改变它的舍入方式(可能是 GCC 错误)?

我在我的x86VM(32位)上发现了以下程序:#includevoidfoo(longdoublex){inty=x;printf("(int)%Lf=%d\n",x,y);}intmain(){foo(.9999999999999999999728949456878623891498136799780L);foo(.999999999999999999972894945687862389149813679978L);return0;}产生以下输出:(int)1.000000=1(int)1.000000=0Ideonealsoproducesthisbehavior.编译器做了什么来

c++ - 如何创建一个类似于 `range` 的可迭代浮点对象?

我想创建一个range类似于c++中的构造,这将像这样使用:for(autoi:range(5,9))cout处理整数情况相对容易:templatestructrange{Tfrom,to;range(Tfrom,Tto):from(from),to(to){}structiterator{Tcurrent;Toperator*(){returncurrent;}iterator&operator++(){++current;return*this;}booloperator==(constiterator&other){returncurrent==other.current;}bo

c++ - 在 C++ 中获取最小 NEGATIVE 浮点值

我在看std::numeric_limits::min/max()但似乎'min()'返回最小的绝对值,而不是lowest值。使用安全吗-std::numeric_limits::max(),即float在最小/最大限制中是对称的吗? 最佳答案 IEEE754float使用符号位来表示符号(而不是像二进制补码之类的东西),所以如果您确定您的编译器/平台使用该表示(非常常见),那么您可以使用-std::numeric_limits::max()正如你所怀疑的那样。 关于c++-在C++中获

c++ - 如何在 Catch 框架中使用浮点容差?

我正在使用Catch测试框架。在introductoryblogpost作者提到了以下特点:Floatingpointtolerancessupportedinaneasytouseway我找不到任何有关如何执行此操作的文档。这在Catch中是如何完成的? 最佳答案 这很简单。有一个类叫Approx这使您可以以非常易读的方式进行此测试:#includeTEST_CASE("demo/approx","Approxdemo"){doublea=1.0;doubleb=a+std::numeric_limits::epsilon();R

c++ - std :map 中的浮点键

下面的代码应该可以找到key3.0在std::map存在的。但由于浮点精度,它不会被找到。mapmymap;mymap[3.0]=1.0;doublet=0.0;for(inti=0;i0);}在上面的例子中,contains将永远是false.我目前的解决方法是乘以t乘0.1而不是加0.1,如下所示:for(inti=0;i0);}现在的问题:有没有办法在std::map中引入模糊比较?如果我使用doublekey?float比较的常见解决方案通常类似于a-b.但是我看不到使用std::map的直接方法来做到这一点。.我真的必须封装double吗?输入一个类并覆盖operator实现

c++ - 我们通常应该使用浮点字面量来代替更简单的 double 字面值吗?

在C++中(或者可能只有我们的编译器VC8和VC10)3.14是一个double字面值,而3.14f是一个float字面量。现在我有个同事说:Weshouldusefloat-literalsforfloatcalculationsanddouble-literalsfordoublecalculationsasthiscouldhaveanimpactontheprecisionofacalculationwhenconstantsareusedinacalcualtion.具体来说,我认为他的意思是:doubled1,d2;floatf1,f2;...initandstuff...

c++ - 我可以在 C++ 中安全地将浮点结构转换为 float 组吗?

这个问题在这里已经有了答案:Reinterpretstructwithmembersofthesametypeasanarrayinastandardcompliantway[duplicate](5个回答)关闭5年前。例如我有这个结构structA{floatx;floaty;floatz;};我可以这样做吗?一一;float*数组=(float*)&a;并使用asfloat组? 最佳答案 在实际意义上,是的,您可以这样做,它适用于所有最常用的架构和编译器。见"TypicalalignmentofCstructsonx86"维基百