Ios NSDecimalNumber,分数升到高幂时返回大数?
好的,我试着把这个分数提高到一个高次。但出于某种原因,根据日志,我只得到了一个非常高的数字,有时甚至是一个NSDEcimalOverfloor错误。有人能帮我吗Ios NSDecimalNumber,分数升到高幂时返回大数?,ios,iphone,objective-c,math,nsdecimalnumber,Ios,Iphone,Objective C,Math,Nsdecimalnumber,好的,我试着把这个分数提高到一个高次。但出于某种原因,根据日志,我只得到了一个非常高的数字,有时甚至是一个NSDEcimalOverfloor错误。有人能帮我吗 NSDecimalNumber*number=[[NSDecimalNumber alloc]initWithDouble:0.4] NSInteger功率=1001 number=[number decimalNumberByRaisingToPower:power] NSLog(@“%@”,数字) 也许我的人数太少,达到了某种极限?
NSDecimalNumber*number=[[NSDecimalNumber alloc]initWithDouble:0.4]代码>
NSInteger功率=1001代码>
number=[number decimalNumberByRaisingToPower:power]代码>
NSLog(@“%@”,数字)代码>
也许我的人数太少,达到了某种极限?什么都行
编辑:oh和stack trace在实际上下文中中断时显示所有数字都相同。来自Apple文档:
NSDecimalNumber是NSNumber的一个不可变子类,它提供了
用于执行base-10算法的面向对象包装器。一个实例可以
表示可以表示为尾数x 10^指数的任何数字
其中尾数是一个长达38位的十进制整数,指数
是从–128到127的整数
所以有一个限制,考虑浮点<代码>双< /代码> .<
0.4^1001:
4e-399
或
0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1
比NSDecimalNumber所能处理的要大得多。这就是浮点的作用。:-)任何稍大于1.0的值在提升到1001次方时都会爆炸。任何稍小于1.0的值在提升到1001次方时都会爆炸。:-)非常好,谢谢你的回复。你知道为什么这个溢出有时会导致大量的数字出现吗?溢出的结果是“未定义的”。坏事发生了,答案是无效的。通常,数字的不同部分(尾数、指数、符号位等)会相互渗透。苹果表示:“这些方法假设精度要求不超过38位有效数字,当它们试图除以0或产生太大或太小而无法表示的数字时,会引发异常。”为了在计算过程中保持一定的准确性,我试着去想象和偏离double。。。。再也不会了!