假设我的机器中有一个单精度浮点格式变量,我想给它分配给定操作的结果。来自维基百科:
IEEE 754标准指定二进制32具有:
我不清楚最后一个要求(e-6的精度)是如何得出的。一般来说,给定一个数据类型如上面的flat32
或flat64
,如何在基数10中找到精度限制?
基本数学是这样的:你搜索n
,这样
2^24 = 10^n
你可以通过取对数来解决这个问题:
24*log(2)=n*log(10)
以10为基数,这是关于
7.22... = n
精度约为7位(十进制)。
请注意,digitus在拉丁语中的意思是手指,所以数字自然应该是十进制的
我在理解浮点型的精度方面有问题。msdn将该精度从6位写入到9位。但我注意到,精度取决于数字的大小: 小数比大数更精确,我理解IEEE754,但我不明白MSDN是如何计算精度的,它有意义吗? 此外,您还可以在这里使用浮点格式的数字表示。请在“您输入的”输入中写入100000000值,然后单击右侧的“1”。然后将输入值更改为1,然后再次单击“1”。你可以看到精度上的差异。
问题内容: 如果我们运行以下代码: 它打印: 文字1.2345678990922222中的长尾将被忽略,但1.22222222222222222222中的长尾不会被忽略(变量d中的最后一个十进制数字变为3而不是2)。为什么? 问题答案: 打印a 或a 时看到的位数是Java的默认规则(从和转换为十进制)的结果。 Java的浮点数默认格式使用最少的有效十进制数字来将数字与附近的可表示数字区分开。1个
我试图改变一个数字在df,但熊猫转换为楼层号码。 我换了一个号码: 它给出: 而不是:
谢谢
我编写了一个程序来演示Go中的浮点错误: 它打印: 这与用C编写的相同程序的行为相匹配(使用双代码类型) 但是,如果改用,程序就会陷入无限循环!如果将C程序修改为使用而不是,它将打印 为什么在使用时,Go程序的输出与C程序的输出不一样?
我理解,不可能用有限的位数来表示所有数字的任意精度,对浮点数进行天真的比较是不可取的。但我想,如果我把许多数字加在一起,我添加它们的**顺序**并不重要。 为了测试这个预测,我创建了一个随机数向量并计算它们的和,然后对向量排序并再次计算和。通常,这两个总数不匹配!这是我的代码(包含在下面)的一个问题,是浮点算法的一个缺点,还是可以通过切换编译器等来解决的问题。?