- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我有一个计算,减去作为 vector 对象组件的两个 float ,然后似乎返回了不正确的结果。
我尝试使用的代码是:
cout << xresult.x << " " << vec1.x << endl;
float xpart1 = xresult.x - vec1.x;
cout << xpart1 << endl;
运行此代码将返回的位置
16 17
-1.00002
如您所见,打印出 xresult.x 和 vec1.x 的值告诉您它们分别为 16 和 17,但减法运算似乎引入了错误。
有什么想法吗?
最佳答案
As you can see, printing out the values of xresult.x and vec1.x tells you that they are 16 and 17 respectively, yet the subtraction operation seems to introduce an error.
不,它根本没有告诉我们。它告诉我们输入值大约为 16 和 17。通常,不精确可能来自两个来源:浮点表示的性质,以及数字打印的精度。
输出流以一定的精度打印浮点值。来自 std::setprecision 的描述功能:
On the default floating-point notation, the precision field specifies the maximum number of meaningful digits to display in total counting both those before and those after the decimal point.
因此,xresult.x
和 vec1.x
的值分别为 16 和 17,精度为 5 位小数。事实上,一个略小于 16,另一个略大于 17。(请注意,这与不精确的浮点表示无关。声明 float f = 16
和 float g = 17
都分配精确值。float
可以容纳精确的整数 16 和 17(尽管 float
不能容纳无限多的其他整数。) ) 当我们从略小于 16 中减去略大于 17 时,我们得到略大于负 1 的答案。
要向自己证明情况确实如此,请进行其中一个或两个实验。首先,在您自己的代码中,在打印这些值之前添加“cout << std::setprecision(10)”。二、运行这个测试程序
#include <iostream>
#include <iomanip>
int main() {
for(int i = 0; i < 10; i++) {
std::cout << std::setprecision(i) <<
15.99999f << " - " << 17.00001f << " = " <<
15.99999f - 17.00001f << "\n";
}
}
注意输出的第 7 行如何匹配您的情况:
16 - 17 = -1.00002
附言所有其他关于不精确浮点表示的建议都是有效的,只是不适用于您的特定情况。您真的应该阅读“每位计算机科学家都应了解的浮点运算知识”。
关于c++ - float 减法返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262889/
我有一个用于“从”和“到”字段的日期选择器,我想要减法的结果。例如:toValue-fromValue,结果以小时为单位。如何做到这一点? 最佳答案 可以使用timeIntervalSinceDate
多边形之间可以进行 bool 运算吗? 我想在 OpenGL 中做一个这样的图形,我想用一个球体和四个较小的球体进行四次减法来实现。 最佳答案 不,仅使用 OpenGL 是不可能的。 OpenGL 是
这就是我在 Haskell 中进行矩阵加法的内容 > add :: (Num a) => [[a]] -> [[a]] -> [[a]] > add [] [] = [] >
我有两个约会: def lastRequestDate = "08-09-2019" (MM-dd-yyyy) 和 def Today = new Date().format('MM-dd-yyyy'
我在 Python 中玩弄大数,我计算了 2**(1322134) 而且显然计算了很长时间。然而,当我计算 2**(1322134) - 2**(1322134) 它立即返回 0。 Python 如
我正在尝试解决一个问题: 编写一个程序计算非负整数之间的差值。 输入: 输入的每一行都由一对整数组成。每个整数都在 0 到 10 之间提高到 15(含)。输入在文件末尾终止。 输出: 对于输入中的每一
是否可以有一个文本框,用户将在其中输入一个数字,而在另一个文本框中,它会自动将第一个文本框的值加 5 并从第三个文本框的值中减去 5? 例如: 用户输入:10 第二个文本框:15 第三个文本框:5 请
假设性问题。我的程序中有一个自定义对象,称为 GamePoint。它已正确定义并具有所有必需的成员。我想知道我是否可以实现类似于以下内容的东西: GamePoint p = new GamePoint
编辑 以前版本的问题没有准确反射(reflect)我的问题。我编辑了它。 我想做一系列破坏性的加法/减法(对具有相应方法的可变对象)。 a 被赋值后: a = [:a, :b] 以下所有返回语法错误。
我需要一个函数来计算 unsigned val 的总和和 signed dX并将结果包装在 lower 范围内和 upper 例如: 值为 5 , 变化 -6 , 以及 0 的范围和 10会返回 10
分而治之矩阵乘法是否执行与经典矩阵乘法相同数量的加法/减法? 我知道它们专门用于乘法运算,因为它们具有相同的 O(n^3) 复杂度... 但是当我尝试在我正在制作的程序中对它们进行计数时,加法/减法得
好的,我需要我的代码来检查减号/减号/-是否被按下,如果它被按下我想要弹出一个警告框。我尝试了 109 和 189 键码,但我仍然没有得到想要的结果。虽然我按 "-" 我没有得到那个警告框 最佳答案
如果我们想要映射一个将范围内的每个元素加 1 的函数,我们可以编写 map (\x -> x + 1) [1..5] 但我想大多数人都会选择 map (+1) [1..5] 相反。但这显然不适用于 (
我正在使用 lex 和 bison 进行简单的计算。它应该做的是解析每个提到的减法 - 1 - -1,1- 1,1--1,最多的是什么重要:1-1。前三种情况有效,但在最后一种情况下,它看起来好像将句
我有一个 MySQL 查询: $q = mysql_query("SELECT id FROM table ORDER BY id DESC LIMIT 2"); while($row = mysql
我有两个字符串列表,listA 和 listB。 listA 更长,我想通过向其添加空字符串来使 listB 具有相同的大小。 这个有效: int diff = listA.size() - list
我现在有两个相似的表(一个用于账单,另一个用于支付),我向用户展示了来自两者的联合混合数据.. Table Bills CustomerId
我有 2 个非索引数据框如下:df1 John Mullen 12/08/1993 Lisa Bush 06/12/1990 Maria Murphy 30/03/1989 Set
我有这个功能: (defun test (variable) (cond ((null variable) nil) (( (lisp-implementation-type) "
我有一个数据框 [in] MyDates [out] 2017-04-04 -5.0 2017-04-03 -5.0 2017-03-31 -4.0 201
我是一名优秀的程序员,十分优秀!