float と定数の比較

by zenith6

HTML

<script src="//code.jquery.com/qunit/qunit-1.14.0.js"></script>
<link rel="stylesheet" href="//code.jquery.com/qunit/qunit-1.14.0.css">
<div id="qunit"></div>
<div id="qunit-fixture"></div>

JavaScript

function a(v) { return v + 0.1; }
function b(v) { return v + 0xdeadbeef; }

test('失敗する', function () {
    var expected = 0.3;
    var actual = a(0.2);
    equal(expected, actual);
});

test('イプシロンで比較', function () {
    var epsilon = Number.EPSILON || 2.2204460492503130808472633361816E-16;
    var expected = 0.3;
    var actual = a(0.2);
    ok(Math.abs(expected - actual) < epsilon);
});

test('イプシロンで比較(失敗した時に何が違うのか判らない;;)', function () {
    var epsilon = Number.EPSILON || 2.2204460492503130808472633361816E-16;
    var expected = 0.3;
    var actual = b(0.2);
    ok(Math.abs(expected - actual) < epsilon);
});

test('期待値を定数にする必要なんてなかった', function () {
    var expected = 0.2 + 0.1;
    var actual = a(0.2);
    equal(expected, actual);
});