- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是我的简单代码。
int num1, num2;
cin >> num1 >> num2;
int num3, num4;
cin >> num3 >> num4;
double result1 = static_cast<double>(num1) / num2;
double result2 = static_cast<double>(num3) / num4;
cout.setf(ios::boolalpha);
cout << (result1 == result2) << endl;
输入:
1 3
2 6
输出:
true
所以我想知道
static_cast<double>(a) / b == static_cast<double>(k * a) / (k * b)
总是正确的?
如果没有,
int num1, num2;
cin >> num1 >> num2;
int num3, num4;
cin >> num3 >> num4;
int gcd1 = gcd(num1, num2);
int gcd2 = gcd(num3, num4);
double result1 = static_cast<double>(num1 / gcd1) / (num2 / gcd1);
double result2 = static_cast<double>(num3 / gcd2) / (num4 / gcd2);
cout.setf(ios::boolalpha);
cout << (result1 == result2) << endl;
总是在输入 a
、b
、k * a
、k * 时打印
到 num1, num2, num3, num4?true
b
最佳答案
假设 IEEE-754 二进制浮点运算与舍入到最近的偶数规则一起使用,除以下情况外,比较都是正确的。
给定int
num1
, num2
, num3
, 和 num4
其中 num3
= k • num1
和 num4
= k • num2
对于一些实数k,有以下情况static_cast<double>(num1) / num2 == static_cast<double>(num3) / num4
可能评估为假:
num3
和 num4
都是零,要么是因为 num1
和 num2
为零或因为 k 为零。那么static_cast<double>(num3) / num4
计算结果为 NaN,而 NaN 永远不会与任何事物进行比较,甚至不会与相同的 NaN 进行比较。num2
为零但 num1
不是,k 是负数。那么static_cast<double>(num1) / num2
根据 num1
是否计算为 +∞ 或 −∞是正数还是负数,而static_cast<double>(num3) / num4
分别计算为相反的 −∞ 或 +∞,因此比较计算为假。int
, 不包括符号位,比 double
的有效数字宽, 由于转换为 double
时的舍入不同,商可能会有所不同.例如,int
可能是 64 位,而 double
有一个 53 位有效数字。假设 num1
是 253+1, num2
是 1,k 是 3,所以 num3
是 254+253+2+1 和 num4
是 3。然后,由于四舍五入,static_cast<double>(num1)
产生 253,static_cast<double>(num3)
产生 254+253+4,除法产生 253 和 253+2,这不相等。num1
或k • num2
溢出 int
类型,比较结果可能为假。除上述情况外,转换为 double
是精确的,并且商是数学定义的(没有零除数)并且相等。在这些情况下,舍入规则要求两个除法产生相同的结果,因此比较结果为真。
关于c++ - a/b == ka/kb 上没有浮点错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56072406/
我正在尝试为我正在处理的项目的 URL 缩短器设置一个带有 .ka 后缀的域。例如类似于 drbl.in。我在网上查了一下,这个后缀似乎还没有在任何国家注册过,也没有出现过任何域名服务。关于如何解决这
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
这是我的简单代码。 int num1, num2; cin >> num1 >> num2; int num3, num4; cin >> num3 >> num4; double result1 =
在市场上我的一个 Android 应用程序的应用程序统计页面中,我看到名为 asura、eagle 和 ka 的设备。此应用程序可用于 Google TV,而我的其他应用程序不可用,因此我假设这些应用
我正在使用 kABPersonPhoneProperty 从地址簿中获取 iPhone“电话号码”。然而,一旦我运行该程序,即使联系人有手机号码、家庭号码和 iPhone 号码,也只出现一个电话号码。
我是一名优秀的程序员,十分优秀!