Oracle exp函数数值溢出错误

Oracle exp function numeric overflow error

我正尝试在 Oracle 中做这样的事情:

   select exp(300) from dual

我得到数字溢出错误,我怎么能从 300 或更大的数字中得到指数,因为我不知道。

谢谢。

exp(300) 是 1.942426e+130,即 greater than the range of Oracle's NUMBER datatype - 您在 Oracle 中可以拥有的最大数字是:9.99...9 x 10125 最多 38 位有效数字。

简而言之,不,您将无法在 Oracle 中计算 exp(300)。

正如 Boneist 所说,Oracle NUMBER 数据类型的小数位数从 -84 到 127。EXP 函数定义为接收 NUMBER,return 接收 NUMBER。所以不能直接使用EXP函数

虽然有一些解决方法。

  1. Binary_double可以存储1.79E308。因此,对于直到 E308 的数字,您可以通过将指数分解为小于 E127 的 NUMBER 来使用它,将它们转换为 BINARY_DOUBLE 并将结果相乘。

  2. 您还可以在 Java/C++/VB 等中使用 external function 来计算指数和 return 结果作为细绳。这将假设您不必对结果进行任何计算,否则您需要创建一个外部函数,在所有必要的计算之后 returns 最终结果。