1
2
猜猜你为什么得到同样的答案:
这里1.0是一个双常数,所以它将把浮点提升为双常数,并将加法作为双常数执行。您可能想在这里声明一个临时的浮点来执行加法,或者使这些浮点数字常量(
您可能还陷入了临时浮动问题中的过度精度问题,可能需要强制它将中间值存储在内存中,以降低到正确的精度。 这里有一个快速的步骤,可以重新使用你的范围搜索方法,但是要用正确的类型计算测试。不过,我得到的答案有点太大了。
|
2
9
这取决于你所说的“精确水平”。 浮点数有“常规”(正常)值,但也有特殊的、次正常的值。如果要找出不同的限制,C标准具有预定义的常量:
以上程序为每种类型打印4个值:
根据你所说的“精确”的意思,上述任何一项或任何一项对你都是有用的。 以下是我的计算机上上述程序的输出:
|
3
2
我不知道你的算法应该如何工作。这一个(C++)给出正确的答案:
这将计算最小值,这样当添加到1时,仍然可以与1区分。 输出:
|
4
2
IEEE754浮点格式具有这样的特性:当重新解释为相同宽度的两个补整数时,它们单调地增加到正值,单调地减少到负值(参见32位浮点的二进制表示)。它们还具有0<f(x)<、和f(x+1)f(x)f(x)f(x1)(其中f(x)是上述x的整数重新解释)。在允许使用类型punning并总是使用IEEE754-1985的语言中,我们可以利用它在恒定时间内计算机器epsilon。例如,在c中:
|
5
1
我想补充一点,您可以通过使用
要将其应用于@rup的解决方案,只需更改
这是我机器上的epsilon
并使用
两者之间的差异非常显著。 |
6
0
这种代码的一个问题是编译器将把浮点变量加载到微处理器的浮点寄存器中。如果你的微处理器只有双精度浮点寄存器,那么它的精度将与
您需要找到一种方法来强制编译器在每两个计算之间将浮点值存储回内存(存储到正确类型的变量中)。这样它就必须丢弃寄存器的额外精度。但是今天的编译器在优化代码方面很聪明。所以这很难实现。 |
June-Solstice · 元组到numpy,数据准确性 2 年前 |
Sorawee Porncharoenwase · 浮点溢出为负 7 年前 |
v78 · 不损失精度的第n项的有效逼近 9 年前 |
FranXh · JavaScript:toFixed(…)方法的缺点 10 年前 |
nickg · If语句不起作用(Python) 11 年前 |
Metrics · Stata中的数据精度 11 年前 |