在我的课程中,我被告知:
连续值大约在内存中表示,因此使用浮点数计算涉及舍入误差.这些是位模式的微小差异; 因此,
e==f如果是漂浮物e,f则测试是不安全的.
参考Java.
这是真的?我使用了doubles和floats的比较语句,并且从未遇到过舍入问题.从来没有我在课本上读过类似的东西.当然虚拟机占了这个?
如果我有变量a,b,类型为double的c,设c:= a/b,并给出a和b值为7和10,则c的值为0.7,寄存器小于0.70.
另一方面,如果变量都是类型扩展的,则c的值0.7不会注册为小于0.70.
这看起来很奇怪.我错过了哪些信息?
我想我会疯了."反击"和"间隔"都是双打.这发生在加速度计上:didAccelerate,间隔为(.01)."计数器"最终应增加到"间隔".由于某种原因,我不能得到这个"如果"响.
我忽略了什么吗?
double interval = .5;
 if( counter == interval ){ //should eventually be .50000 == .50000
  NSLog( @"Hit!" );
  [self playSound];
  counter = 0;
 }else{
  counter += .01;
 }
NSLog( @"%f, %f, %d",counter,interval,(counter == interval) );
码:
var tax= 14900*(0.108);
alert(tax);
以上给出了1609.2的答案
var tax1= 14900*(10.8/100);
alert(tax1);
以上给出了1609.200000000003的答案
为什么?我想我可以收集价值观,但为什么会这样呢?
更新: 找到问题的临时解决方案.
首先乘以:
(14900*10.8)/100 = 1609.2
然而
(14898*10.8)/100 = 1608.9840000000002
为此,将10.8乘以a factor(100 in this case)并调整分母:
(14898*(10.8*100))/10000 = 1608.984
我想如果可以为额外的000s做一个preg_match然后相应地调整因子,可以避免浮点错误.然而,最终的解决方案是数学库.
我正在使用下面的一段代码,并且在一些神秘的情况下,添加的结果并不像它应该的那样:
double _west = 9.482935905456543;
double _off = 0.00000093248155508263153;
double _lon = _west + _off;
// check for the expected result
Debug.Assert(_lon == 9.4829368379380981);
// sometimes i get 9.48293685913086 for _lon (which is wrong)
我在我的应用程序中使用了一些本机DLL,我怀疑某些DLL是造成这种"错误计算"的原因,但我需要弄清楚哪一个.任何人都可以给我一个提示如何找出问题的根源吗?
我有一个MKAnnotation名为的对象数组arrAnnotations.我想从与CLLocation名为"newLocation" 的对象中存储的坐标相同的坐标中选择一个注释.
我正在尝试使用a NSPredicate,但它不起作用.
NSPredicate *predicate = [NSPredicate  predicateWithFormat:@"(SELF.coordinate == %f)", newLocation.coordinate];
NSArray* filteredArray = [arrAnnotations filteredArrayUsingPredicate:predicate];
[self.mapView selectAnnotation:[filteredArray objectAtIndex:0] animated:YES];
filteredArray始终包含零个对象.
我也试过以下,但也无效
NSPredicate *predicate = [NSPredicate  predicateWithFormat:@"(coordinate == %f)", newLocation.coordinate];
和
NSPredicate *predicate = [NSPredicate  predicateWithFormat:@"(coordinate > 0)"];
和
NSPredicate *predicate = [NSPredicate  predicateWithFormat:@"(coordinate.latitude == %f)", newLocation.coordinate.latitude];
最后两个崩溃了应用程序,第三个崩溃了NSInvalidArgumentExceptionfor [NSConcreteValue compare:]和第四个,因为latitude它不符合键值编码(我认为这是因为坐标只是一个c-struct而不是一个NSObject?).
我该如何使用它NSPredicate?任何人都可以给我一个链接到一个文件,显示Predicates如何在幕后工作?我不明白他们实际做了什么,尽管我已阅读并理解Apple的Predicate Programming Guide的大部分内容.正在使用for ... in构造中搜索带有谓词的大型数组比使用谓词循环更有效吗?如果是/否,为什么?
可能重复:
Objective-C中的浮点数有问题
我已经把这个问题解决了,就像我能得到它一样简单.随意尝试相同的事情,并告诉我,如果你得到相同的错误,你可能有什么解决方案.我已经在几台电脑上试过了.
float total = 200000.0f + 154196.8f;
NSLog(@"total: %f", total);
输出是:
total: 354196.812500
如果有人有任何逻辑解释,请随时分享.
comparison ×2
math ×2
objective-c ×2
.net ×1
addition ×1
c# ×1
cocoa ×1
delphi ×1
double ×1
ios ×1
iphone ×1
java ×1
javascript ×1
memory ×1
nspredicate ×1
performance ×1
predicate ×1
types ×1