- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试 printf M_PI,但我认为我没有使用正确的格式说明符。输出应为:3.14159265358979323846 但我得到 3.14159265358979300000。
int main(void)
{
printf("%.20f\n", M_PI);
return 0;
}
我试过使用 %Lf、%Lg、%e、%g 但它们都不起作用,所以我不确定这个错误是来自格式说明符还是与我的硬件有关'我正在使用。
最佳答案
假设您的编译器将 double
浮点类型映射到 IEEE 754 double ,则 double
具有 53 位二进制精度。 float 以 2 为基数表示的事实意味着它不是可以表示为 double
并且具有短十进制表示的同一组数字。特别是,最接近 π 的 double
的精确值具有仅 53 位二进制精度的紧凑表示,但以十进制表示为 3.141592653589793115997963468544185161590576171875。这不是 π 到 50 位十进制数字的近似值!它是 π 的近似值,精度为 53 位二进制数,这意味着大约前 17 位十进制数是正确的,而其他数位只是因为与 M_PI
中的基数 2 不匹配而存在以 10 为基数,我们现在正在讨论它的值(value)。
这意味着您可以期望质量 printf
实现打印3.14159265358979311600
。请注意,这并不完全是您在问题中所说的预期字符串,而是 .
后 M_PI
实际值的四舍五入十进制表示形式到 20 位数字。无论如何,您可以期待一个quality printf
实现来打印显示double
精确值所需的所有十进制数字,尽管在最坏的情况there can be 750 or so .
C 标准 does not force所有 printf
实现都具有此属性:
For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most DECIMAL_DIG, then the result should be correctly rounded. If the number of significant decimal digits is more than DECIMAL_DIG but the source value is exactly representable with DECIMAL_DIG digits, then the result should be an exact representation with trailing zeros. Otherwise, the source value is bounded by two adjacent decimal strings L < U, both having DECIMAL_DIG significant digits; the value of the resultant decimal string D should satisfy L <= D <= U, with the extra stipulation that the error should have a correct sign for the current rounding direction.
更容易实现最多打印 double
的精确值的前 17 位十进制数字,然后清零,并且 C 标准允许这样的实现。这可能是您的编译器发生的情况。(采用这种捷径的编译器通常也不会实现“当前舍入方向”约束。)
关于c - M_PI 不精确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51344013/
我正在尝试 printf M_PI,但我认为我没有使用正确的格式说明符。输出应为:3.14159265358979323846 但我得到 3.14159265358979300000。 int mai
当我编译下面的代码时,我收到了这些错误消息: (Error 1 error C2065: 'M_PI' : undeclared identifier 2 IntelliSense: ide
对于以下内容: struct Constants { static let m2Pi = CGFloat(M_PI) * 2 } SwiftLint 0.16.1 警告我: warning:
我正在使用 CGAffineTransformMakeRotation旋转 UIView在一个动画 block 中,我想将它逆时针旋转 180º . 但是当我放 myView.animateWithD
我正在使用 C 并试图访问常量 M_PI (3.14159...)。我导入了 math.h 头文件,但 M_PI 常量仍未定义。通过在 StackOverflow 上进行一些搜索,我发现我需要将 #d
有没有C++11 constexpr常量可以用来代替 中的常量宏,即像 M_PI 这样的常量和 friend ?或者缺少它,任何全局 const在运行时提供这些常量的值? 最佳答案 C++ 标准库中
我从 Github fork 了一个项目,Xcode 显示了很多警告: 'M_PI' is deprecated: Please use 'Double.pi' or '.pi' to get the
这个问题在这里已经有了答案: M_PI works with math.h but not with cmath in Visual Studio (7 个答案) 关闭 4 年前。 我正在尝试使用
我正在使用 CGAffineTransformMakeRotation旋转 UIView在一个动画 block 中,我想将它逆时针旋转 180º . 但是当我放 myView.animateWithD
我正在使用 C 并试图访问常量 M_PI (3.14159...)。我导入了 math.h 头文件,但 M_PI 常量仍未定义。通过在 StackOverflow 上进行一些搜索,我发现我需要将 #d
我正在编写一个科学程序,它在其主要算法中使用正弦的公共(public)值,即 sin(M_PI/N)对于 N = 1, 2, 3, 4, 5, 6 . 因为我希望我的程序尽可能快,所以我想:让我们将这
我在使用 Visual Studio 2012 编译包含 cmath 的 C++ 项目时遇到问题,我收到此错误 error C2065: 'M_PI' : undeclared identifier
我正在使用 swift spritekit。 嗨,我有几个关于 M_PI 的问题,这是我最近了解到的。对于我的游戏,我一直在研究旋转事物的不同方法。基本上,在我的游戏中有 2 架飞机围绕屏幕中心“飞行
在我的代码中包含一些数学,我偶然发现了常量“PI”。至少在我的 Xcode 4.6 版中我可以使用其中任何一个。但是 pi 和 M_PI 有什么区别呢?该文档在该主题上有点紧。 最佳答案 pi 在“C
我想在 Visual C++ 2008 中使用数学常量,例如 M_PI 和 M_E。我假设它们是在 cmath header 中定义的。 最佳答案 They are ,但您还需要#define _US
这就是我检查数字是否被 2*M_PI 整除所做的工作。 “w”是一个常数,它是 2/3,t 是随 t += dt 变化的变量,其中 dt 是 0.1。我正在尝试使用 mod 运算符 % 来查看某些内容
在我的非托管 C++ 源代码中,我有: #define _USE_MATH_DEFINES #include 然后我用了几次 M_PI。在 Debug 配置中编译可以完美运行,但在 Release
我正在尝试在 Objective-C 中进行简单的旋转,但马上就会出现一些问题。一件事是我从 CGAffineTransformRotate 得到的不一致以及在该函数内部使用时 M_PI 如何不一致。
我正在玩 Core Animation,我正在为我的最后一个宠物用例而苦苦挣扎:在 y 轴上旋转一张卡片。 我的 View 是这样设置的: - AceView | └- backgroun
我注意到 M_PI 在 c11 上不可用。通过查看 /usr/include/math.h 我可以看到 M_PI 定义为: #if !defined(__STRICT_ANSI__) || ((_XO
我是一名优秀的程序员,十分优秀!