- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
由于减法中的浮点错误,在以下情况下是否可以被零除?
float x, y, z;
...
if (y != 1.0)
z = x / (y - 1.0);
换句话说,下面是不是更安全一些?
float divisor = y - 1.0;
if (divisor != 0.0)
z = x / divisor;
最佳答案
假设 IEEE-754 float ,它们是等价的。
FP 算法的一个基本定理是,对于有限的 x 和 y,x - y == 0 当且仅当 x == y,假设逐渐下溢。
如果次正规结果被刷新为零(而不是逐渐下溢),则只有当结果 x - y 是正规的时,这个定理才成立。因为 1.0 的缩放比例很好,所以 y - 1.0
永远不会低于正规值,因此当且仅当 y 恰好为 1.0 时 y - 1.0
为零,而不管下溢是如何处理的。
当然,C++ 不保证 IEEE-754,但该定理对于大多数“合理的”浮点系统都是正确的。
关于c++ - 除以零预防 : Checking the divisor's expression doesn't result in zero vs. 检查除数不为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12825471/
题目地址:https://leetcode.com/problems/divisor-game/ 题目描述 Alice and Bob take turns playing a game, wit
以下关系仅适用于两个 (3, 12) 数字,当用于三个数字 (3,12,10) 时无法产生正确答案。只是想知道这是我的理解还是仅适用于两个数字,对我来说欧几里得算法也是如此。 LCM(a, b) =
我想知道,如何在运行代码后将显示的除数相加? #include #include int main() { int n, i; scanf("%d", &n); for(i
我的问题是: Print all numbers from low to high. If any number being printed is divisible by any divisor n
我正在 MathBlog 上阅读 Project Euler Problem 12 的解决方案,但在理解代码背后的逻辑时遇到了一些困难。该程序使用素因数分解来查找三角形数的因数数。 private i
当给定一个整数 n 时,打印出 n 以内的所有正数和 4 个正约数。 示例: 10 --> 6 8 10 16 --> 6 8 10 14 15 我的代码 public class ass5_q1
所以我尝试找出这个问题的解决方案,但我的程序表现得很奇怪。 #include using namespace std; int triangle_numbers(int n, int meh = 0
由于减法中的浮点错误,在以下情况下是否可以被零除? float x, y, z; ... if (y != 1.0) z = x / (y - 1.0); 换句话说,下面是不是更安全一些? f
我正在oracle 10g下创建一个SQL查询,结果应该给我类似的东西: ---------------------------------------------------------------
当涉及非常大的数字时,我的代码非常慢。 def divisors(num): divs = 1 if num == 1: return 1 for i in r
我是一名优秀的程序员,十分优秀!