1--source include/big_test.inc
2
3--disable_warnings
4drop procedure if exists sp1;
5--enable_warnings
6
7#
8#-- 2. Adding (one millionth) one million times should be the same as
9#-- adding 1. So a stored procedure with many iterations will show if
10#-- small errors accumulate.
11#
12
13delimiter //;
14#
15CREATE PROCEDURE sp1()
16BEGIN
17  DECLARE v1, v2, v3, v4 DECIMAL(28,12);
18  DECLARE v3_2, v4_2 DECIMAL(28, 12);
19  DECLARE counter INT;
20
21  SET v1 = 1;
22  SET v2 = 2;
23  SET v3 = 1000000000000;
24  SET v4 = 2000000000000;
25  SET counter = 0;
26
27  WHILE counter < 100000 DO
28   SET v1 = v1 + 0.000000000001;
29   SET v2 = v2 - 0.000000000001;
30   SET v3 = v3 + 1;
31   SET v4 = v4 - 1;
32   SET counter = counter + 1;
33  END WHILE;
34
35  SET v3_2 = v3 * 0.000000000001;
36  SET v4_2 = v4 * 0.000000000001;
37
38  SELECT v1, v2, v3, v3_2, v4, v4_2;
39END//
40#
41call sp1()//
42#-- should return
43#   -- v1=1.0000001
44#   -- v2=1.999999900000
45#   -- v3=1.0000001
46#   -- v4=1.999999900000
47#
48delimiter ;//
49#
50drop procedure sp1;
51