Math.log()不精确-如何处理
Math.log() inaccuracy - How to deal with it?
我知道要得到一个基于10的对数,我必须使用Math.log((除以10的自然对数的常数。
var e1000 = Math.log(1000) / Math.LN10;
// Result: 2.9999999999999996 instead of
// expected 3.
console.log(e1000);
// Result: 999.999999999999 instead of
// expected 1000.
console.log(Math.pow(10, e1000));
但是:结果只是一个近似值。如果我在进一步的计算中使用计算值,不准确度会变得更糟。
我做错什么了吗?有没有比使用Math.ceil((更优雅的方法呢?
浮点舍入差是已知的,巧合的是2.9999正是MDN Math.Log页面中使用的示例。如您所述,Math.ceiling
可用于调整结果。同样,您可以增加基数并使用较小的除法器来减少浮动误差的变化。例如
function log10(value){
return -3 * (Math.log(value * 100) / Math.log(0.001)) - 2;
}
示例:fiddle
顺便说一句,有些浏览器已经支持Math.log10功能,如果Math
没有用实现,你可以扩展它来使用上面的功能
if (!Math.log10) Math.log10 = function(value){
return -3 * (Math.log(value * 100) / Math.log(0.001)) - 2;
};
在运行该初始值设定项之后,您可以简单地使用Math.log10()
,并且您的代码将在浏览器功能可用的地方(或当它可用时(自动使用该功能。(小提琴(
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 如何处理10页以上的静态页眉/页脚
- 将事件处理程序绑定到任何可能的事件
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- python到“;流“;字典处理
- 使用javascript进行实时图像处理
- 导入jQuery脚本获胜'我不处理html文件
- Javascript无法处理表单提交
- JavaScript 任务调度程序(批处理处理)
- RegEx在VBA和JavaScript中的处理方式有何不同?