是否有printf宽度说明符可以应用于浮点说明符,该说明符会自动将输出格式化为必要的有效位数,以便在重新扫描字符串时,获取原始浮点值?
例如,假设我打印float到2小数位数的精度:
float foobar = 0.9375;
printf("%.2f", foobar); // prints out 0.94
Run Code Online (Sandbox Code Playgroud)
当我扫描输出时0.94,我没有符合标准的保证我将获得原始的0.9375浮点值(在这个例子中,我可能不会).
我想要一种方法告诉printf自动将浮点值打印到必要的有效位数,以确保它可以扫描回传递给的原始值printf.
我可以使用一些宏float.h来导出要传递的最大宽度printf,但是是否已经有一个说明符可以自动打印到必要的有效位数 - 或者至少是最大宽度?
在C++(和C)中,没有后缀的浮点文字默认为double,而后缀f意味着a float.但是后缀是long double什么?
不知道,我会定义,比方说,
const long double x = 3.14159265358979323846264338328;
Run Code Online (Sandbox Code Playgroud)
但我担心的是变量x包含的有效位3.14159265358979323846264338328少于64,因为这是一个double文字.这种担心是否合理?
我有一个XSD,要求我使用BigDecimal作为lat/lon.我目前将lat/lon作为双精度,并将它们转换为BigDecimal,但我只需要使用大约12个精度位置.我无法弄清楚如何设置它.谁能帮我这个?
这里发生了什么:
#include <stdio.h>
#include <math.h>
int main(void) {
printf("17^12 = %lf\n", pow(17, 12));
printf("17^13 = %lf\n", pow(17, 13));
printf("17^14 = %lf\n", pow(17, 14));
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
17^12 = 582622237229761.000000
17^13 = 9904578032905936.000000
17^14 = 168377826559400928.000000
Run Code Online (Sandbox Code Playgroud)
13和14与wolfram alpa cf 不匹配:
12: 582622237229761.000000
582622237229761
13: 9904578032905936.000000
9904578032905937
14: 168377826559400928.000000
168377826559400929
Run Code Online (Sandbox Code Playgroud)
而且,一些奇怪的部分并没有错 - 一个错了!
如果这是我达到pow()可以为我做什么的限制,有没有可以计算这个的替代方案?我需要一个可以计算的函数x^y,其中x^y始终小于ULLONG_MAX.
如何在Python浮动列表中找到最小项的索引?如果它们是整数,我只会这样做:
minIndex = myList.index(min(myList))
Run Code Online (Sandbox Code Playgroud)
但是,对于浮点数列表,我得到以下错误,我假设因为浮点相等比较相当不确定.
ValueError: 0.13417985135 is not in list
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以简单地滚动列表并比较每个项目,看它是<(min + 0.0000000000001)和>(min - 0.0000000000001),但这有点混乱.是否有更优雅(最好是内置)的方法来查找浮动列表中最小项的索引?
我不断得到浮点数(即float,, double或long double)是否只有一个精度值,或者具有可以变化的精度值的混合答案.
一个名为float vs. double precision的主题似乎暗示浮点精度是绝对的.
然而,另一个叫做float和double之间差异的话题说,
通常,double具有15到16个十进制数字的精度
另一位消息人士称
float类型的变量通常具有大约 7位有效数字的精度
double类型的变量通常具有大约 16位有效数字的精度
如果我正在使用敏感代码,当我的值不准确时,我不喜欢引用上面的近似值.所以让我们记录下来吧.浮点精度是可变的还是不变的,为什么?
floating-point binary decimal significant-digits floating-point-precision
在JavaScript中,我有一个21位的数字,我想解析它.
JavaScript中是否存在parseDouble方法?
为什么ColdFusion中的数学运算似乎不受浮点数学问题的影响?拿代码:
result = 0.06 + 0.01;
writedump(result);
writedump(result.getClass().getName());
Run Code Online (Sandbox Code Playgroud)
哪个输出
0.07
java.lang.Double中
然而,相当的Java代码产生了我在添加两个双精度时所期望的:
public static void main(String[] args) {
double a = 0.01d;
double b = 0.06d;
System.out.println(a + b); //0.06999999999999999
}
Run Code Online (Sandbox Code Playgroud)
这是我期望从ColdFusion看到的,因为浮动数学的现实(http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html).
ColdFusion在幕后做了一些"魔术"还是我在这里看到一个孤立的异常?
我正在查看旧的考试问题(目前是大学的第一年).我想知道是否有人能够更彻底地解释为什么以下for循环在它应该结束时不会结束.为什么会这样?我知道它因为四舍五入错误而跳过100.0,但为什么呢?
for(double i = 0.0; i != 100; i = i +0.1){
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud) 作为单元测试的一部分,我需要测试一些边界条件.一种方法接受一个System.Double参数.
有没有办法获得下一个最小的双值?(即将尾数减1个单位值)?
我考虑使用,Double.Epsilon但这是不可靠的,因为它只是从零开始的最小增量,因此不适用于较大的值(即9999999999 - Double.Epsilon == 9999999999).
那么所需的算法或代码是什么:
NextSmallest(Double d) < d
Run Code Online (Sandbox Code Playgroud)
......总是如此.