A correct form of the query would be:

    SELECT
    	t1.date,
    	(SELECT v1.type_id FROM tbl_values v1 where v1.type_id = 100 AND v1.date <= t1.date ORDER BY v1.date desc limit 1) as `type`,
    	(SELECT v1.`value` FROM tbl_values v1 where v1.type_id = 100 AND v1.date <= t1.date ORDER BY v1.date desc limit 1) as `value`
    
    FROM tbl_calendar t1
    having `type` IS NOT NULL

with result as:

    2016-12-02	100	1.00
    2016-12-03	100	1.00
    2016-12-04	100	2.00
    2016-12-05	100	2.00
    2016-12-06	100	3.00
    2016-12-07	100	3.00
    2016-12-08	100	4.00
    2016-12-09	100	4.00
    2016-12-10	100	5.00

but, again look at your query and your expected result please. 

What do you want to have in the result (**type, date, value**) with:

    SELECT 
        c.date,
    
        o1.value_id AS "o1.value_id",
        o2.value_id AS "o2.value_id",
    
        o1.type_id AS "o1.type_id",
        o2.type_id AS "o2.type_id",
    
        o1.date AS "o1.date",
        o2.date AS "o2.date"


[![query plan][1]][1]


  [1]: https://i.sstatic.net/a2a17.png