Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么浮点误差在C语言中是不同的?_Objective C_C_Floating Point_Precision - Fatal编程技术网

Objective c 为什么浮点误差在C语言中是不同的?

Objective c 为什么浮点误差在C语言中是不同的?,objective-c,c,floating-point,precision,Objective C,C,Floating Point,Precision,请看图片: 我很惊讶结果是不同的。ACGFloat在64位平台上实际上是一个double。(在旧的32位平台上,它是一个浮点值) 所以这里你把一个double除以一个double: CGFloat price = 88888736 / a; ^^^^^ ^^^^^^^^ ^ double int -> double double 在这里,你将一个双精度除以一个浮点数

请看图片:


我很惊讶结果是不同的。

A
CGFloat
在64位平台上实际上是一个
double
。(在旧的32位平台上,它是一个
浮点值

所以这里你把一个
double
除以一个
double

CGFloat price    =    88888736      /     a;
        ^^^^^         ^^^^^^^^            ^
       double        int -> double      double
在这里,你将一个
双精度
除以一个
浮点数

CGFloat price2    =   88888736     /   100.0f;
        ^^^^^^        ^^^^^^^^         ^^^^^^
        double       int -> double      float
100.0f
更改为
100.0
(CGFloat)100
,您应该会没事的


CGFloat
在您的机器上是一个
double
,因此您要做的是:

double a = 100.00f
double price = 88888736 / a

float a2 = 100.00f // `float` type enforced by the trailing `f`
double price2 = 88888736 / a2

不同之处在于,在第一种情况下,该除法是一个
双除法
,而在第二种情况下,该除法是一个
浮点
除法,然后将结果分配给一个
双除法
。由于
float
除法的精度较低,因此可以得到所看到的结果。

float的精度只有大约7位小数。将两个浮点数除以,即可计算
price2
。(您对结果所做的操作不会改变结果的计算方式。您将其存储在
CGFloat
中不会使除法保持那么高的精度。)将纯文本显示为文本而不是图片真的太难吗?您的文本图像。它不能被大声朗读或复制到编辑器中,而且索引也不太好,这意味着其他有同样问题的用户在这里找到答案的可能性较小。请您的帖子直接包含相关文本(最好使用复制+粘贴以避免抄写错误)。可能的重复不是那一个的重复。可能不明显的部分是第一个除法是双除法,因为它将整型文字和双除法分开。第二个除法是浮动除法,因为它将整型文字和浮动文字分开。@Sulthan:谢谢-我添加了一个现在更详细的解释。自去年11月以来,您没有回答任何问题。怎么搞的?这似乎已经慢下来了。@Zboson:heh-非常敏锐-这真的是多种因素的组合:工作和家务事太忙了+最近有更多的SIMD专家(Peter Cordes多产!)+大多数新问题似乎要么质量不高,要么重复。但仍然在这里…;-)