相关疑难解决方法(0)

浮动和双重比较最有效的方法是什么?

比较两个double或两个float值的最有效方法是什么?

简单地这样做是不正确的:

bool CompareDoubles1 (double A, double B)
{
   return A == B;
}
Run Code Online (Sandbox Code Playgroud)

但是像这样:

bool CompareDoubles2 (double A, double B) 
{
   diff = A - B;
   return (diff < EPSILON) && (-diff < EPSILON);
}
Run Code Online (Sandbox Code Playgroud)

似乎浪费处理.

有谁知道更聪明的浮动比较器?

c++ algorithm floating-point optimization

495
推荐指数
13
解决办法
39万
查看次数

我该如何进行浮点比较?

我正在编写一些代码,其中包含以下内容:

double a = SomeCalculation1();
double b = SomeCalculation2();

if (a < b)
    DoSomething2();
else if (a > b)
    DoSomething3();
Run Code Online (Sandbox Code Playgroud)

然后在其他地方我可能需要做平等:

double a = SomeCalculation3();
double b = SomeCalculation4();

if (a == 0.0)
   DoSomethingUseful(1 / a);
if (b == 0.0)
   return 0; // or something else here
Run Code Online (Sandbox Code Playgroud)

简而言之,我有很多浮点数学正在进行,我需要对条件进行各种比较.我无法将其转换为整数数学,因为在这种情况下这样的事情毫无意义.

我以前读过浮点比较可能不可靠,因为你可以做这样的事情:

double a = 1.0 / 3.0;
double b = a + a + a;
if ((3 * a) != b)
    Console.WriteLine("Oh no!");
Run Code Online (Sandbox Code Playgroud)

简而言之,我想知道:我如何可靠地比较浮点数(小于,大于,相等)?

我使用的数字范围大致是从10E-14到10E6,所以我确实需要使用小数字和大数字.

我已将此标记为语言无关,因为无论我使用何种语言,我都对如何实现此目标感兴趣.

language-agnostic floating-point comparison

73
推荐指数
4
解决办法
6万
查看次数

将浮点数与零进行比较

C++ FAQ lite "[29.17]为什么我的浮点比较不起作用?" 建议这个相等测试:

#include <cmath>  /* for std::abs(double) */

inline bool isEqual(double x, double y)
{
  const double epsilon = /* some small number such as 1e-5 */;
  return std::abs(x - y) <= epsilon * std::abs(x);
  // see Knuth section 4.2.2 pages 217-218
}
Run Code Online (Sandbox Code Playgroud)
  1. 这是否正确,这意味着唯一等于零的数字是+0-0
  2. 当测试零或者测试时,是否应该使用此功能|x| < epsilon

更新

正如Daniel Daranas所指出的那样,最好调用函数isNearlyEqual(我关心的是这种情况).

有人指出了这个链接,我想更加突出地分享.

c++ floating-point

52
推荐指数
5
解决办法
8万
查看次数

比较Double和Int的最佳方法是什么?

C#中的以下代码不起作用:

int iValue = 0;
double dValue = 0.0;

bool isEqual = iValue.Equals(dValue);
Run Code Online (Sandbox Code Playgroud)

那么,问题是:比较Double和Int的最佳方法是什么?

c# double int equals

24
推荐指数
1
解决办法
3万
查看次数

比较浮点数 - 相同的数字,但不相等?

可能重复:
我应该如何进行浮点比较?
php整数和浮点数比较不匹配

我有两个变量,$_REQUEST['amount']并且$carttotal,在电子商务的事情.当然,它们在尝试处理付款时应该匹配,以防止在最后一分钟手动覆盖支付金额,或者当然是计算错误.

然而:

$carttotal = $carttotal * 1;
$_REQUEST['amount'] = $_REQUEST['amount'] * 1;

if($carttotal != $_REQUEST['amount']) {
    $code = 0; // cart empty under this user - cannot process payment!!! 
    $message = 'The cart total of ' . $carttotal . ' does not match ' . $_REQUEST['amount'] . '. Cannot process payment.';
    $amount = $carttotal;
    $json = array('code' => $code,
                  'message' => $message,
                  'amount' => $amount);
    die(json_encode($json));
} else {
    $trnOrderNumber = $client->id . …
Run Code Online (Sandbox Code Playgroud)

php floating-point

14
推荐指数
2
解决办法
2万
查看次数

比较IEEE浮点数和双精度数是否相等

比较IEEE浮点数和双精度数据的最佳方法是什么?我听说过几种方法,但我想看看社区的想法.

variables floating-point inequality

9
推荐指数
1
解决办法
5077
查看次数

如何检查Math.cos(角度)= 0

我正在尝试为该tan功能找到正确的域名,我知道

tan x = sinx / cos x
Run Code Online (Sandbox Code Playgroud)

并且tan未定义时cos x = 0.所以

我想检查是否cos x 为0.

 if ( Math.Cos(x).Equals(0) )
 {
     // do stuff
 }
Run Code Online (Sandbox Code Playgroud)

但这绝不是真的,因为Math.Cos返回6.123....E-17 如何检查cos == 0?

c#

4
推荐指数
1
解决办法
338
查看次数

解析json不正确

我正在从Apple JSON(应用程序的评级)解析一些东西,我尝试了类似的东西:

 if ([StoreParse objectForKey:@"averageUserRating"] == @"4.5") {
        NSLog(@"xx");
    } else {
        NSLog(@"xxx");
    }
Run Code Online (Sandbox Code Playgroud)

该应用程序的评级为4.5,如果我这样做

NSlog (@"%@", [StoreParse objectForKey:@"averageUserRating"]);
Run Code Online (Sandbox Code Playgroud)

输出为:4.5

但是当我运行脚本时,第一个代码输出中的NSlog是"xxx",有人可以帮助我吗?

cocoa cocoa-touch objective-c

1
推荐指数
1
解决办法
103
查看次数