mirror of
https://github.com/chartjs/Chart.js.git
synced 2024-10-06 04:09:08 +02:00
Bugfix: Improve polyfill function of log10 to return whole powers of 10 (#5275)
* Bugfix: Improve polyfill function of log10 to return whole powers of 10 as integer values, as it caused endless loop in IE11 in the tick creation loop. * Compare floating-point numbers directly instead of using unnecessary division.
This commit is contained in:
parent
c90cf2ebcd
commit
c2a5b12376
@ -159,7 +159,13 @@ module.exports = function(Chart) {
|
||||
return Math.log10(x);
|
||||
} :
|
||||
function(x) {
|
||||
return Math.log(x) / Math.LN10;
|
||||
var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.
|
||||
// Check for whole powers of 10,
|
||||
// which due to floating point rounding error should be corrected.
|
||||
var powerOf10 = Math.round(exponent);
|
||||
var isPowerOf10 = x === Math.pow(10, powerOf10);
|
||||
|
||||
return isPowerOf10 ? powerOf10 : exponent;
|
||||
};
|
||||
helpers.toRadians = function(degrees) {
|
||||
return degrees * (Math.PI / 180);
|
||||
|
@ -194,8 +194,12 @@ describe('Core helper tests', function() {
|
||||
|
||||
it('should do a log10 operation', function() {
|
||||
expect(helpers.log10(0)).toBe(-Infinity);
|
||||
expect(helpers.log10(1)).toBe(0);
|
||||
expect(helpers.log10(1000)).toBeCloseTo(3, 1e-9);
|
||||
|
||||
// Check all allowed powers of 10, which should return integer values
|
||||
var maxPowerOf10 = Math.floor(helpers.log10(Number.MAX_VALUE));
|
||||
for (var i = 0; i < maxPowerOf10; i += 1) {
|
||||
expect(helpers.log10(Math.pow(10, i))).toBe(i);
|
||||
}
|
||||
});
|
||||
|
||||
it('should correctly determine if two numbers are essentially equal', function() {
|
||||
|
Loading…
Reference in New Issue
Block a user