Ios NSDecimalNumber,分数升到高幂时返回大数?

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(@“%@”,数字) 也许我的人数太少,达到了某种极限?

好的,我试着把这个分数提高到一个高次。但出于某种原因,根据日志,我只得到了一个非常高的数字,有时甚至是一个NSDEcimalOverfloor错误。有人能帮我吗

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。。。。再也不会了!