Math.Log(x,y)在什么条件下抛出DivideByZeroException?

时间:2017-06-27 05:06:09

标签: c#

我最近收到了一个包含以下调用堆栈的崩溃日志:

library(ggplot2)

# Some fake parameter estimates
b1 <- c("2.33", "1.29", "1.15")
b2 <- c("4.45", "2.32", "2.28")
b3 <- c("2.30", "1.23", "2.10")

labs <- paste0("b1 = ", b1,
"\nb2 = ", b2, "\nb3 = ", b3)

dat <- data.frame(
  x = rep(7, 3),
  y = rep(41, 3),
  drv = unique(mpg$drv),
  labels = labs)

p <- ggplot(mpg, aes(displ, hwy)) +
     geom_point() +
     geom_smooth(span = 0.8) +
     theme_bw() +
     facet_wrap(~drv) +
     geom_text(data=dat,
               aes(x,y,
               label=labels),
               hjust=1,    
               size = 3.6,
               inherit.aes=FALSE)
p

但是,据我所知from the docs,不应该抛出这个例外,我已经在测试程序中尝试了各种输入,并且无法重现这个例外。此外,调用此函数的代码具有有限的输入范围,因此我认为输入值正常。

我想知道这可能是一个糟糕的插件(我的程序托管插件通常用C ++编写)或其他一些代码在FPU上留下浮点错误的结果吗?

有关如何预防或至少保护自己的想法吗?

更新以回答评论中的一些问题:

  • 这发生在.NET 4 Client Profile
  • 该应用程序内置于发布模式
  • 我无法访问导致异常的输入值
  • 我无法真正禁用这些插件 - 这是一个托管VST插件的音乐应用。
  • 这种例外情况非常罕见 - 我每天都有数千名用户在运行应用程序时看到它只有两次,所以在应用程序环境中尝试这一点并非真有帮助。
  • 在报告异常的调用堆栈上,newBase参数始终为10.0 - 因此非epsilon与1.0的比较不应成为问题。

更新2:原来这个客户可以重现问题并发现它与他的一个插件的许可有关。一旦许可问题得到解决,问题就会消失。这对我来说太神秘了,但在这个阶段,我很高兴他得到了解决方案。为了引用客户,它最终以不同的方式崩溃了每个主机&#34;。

0 个答案:

没有答案