11#pragma once
22#include < string>
33
4- inline std::string SRC_HIGH_PRECISION_FRAG =
5- R"shdr( #version 300 es
6-
7- precision highp float;
8-
9- const int LIMB_SIZE = 32;
10- const int FRACTIONAL_SIZE = LIMB_SIZE/2;
11-
12- struct number{
13- uint limb[LIMB_SIZE];
14- int sign;
15- bool is_infinite;
16- };
17-
18- struct hp_vec2{
19- number x;
20- number y;
21- };
22-
23- hp_vec2 initialize_hp_vec2(number x, number y){
24- hp_vec2 res;
25- res.x = x;
26- res.y = y;
27- return res;
28- }
29-
30- number null_number(){
31- number res;
32- for(int i = 0; i < LIMB_SIZE; ++i){
33- res.limb[i] = 0u;
34- }
35- res.sign = 1;
36- return res;
37- }
38-
39- number infinite_number(){
40- number res;
41- for(int i = 0; i < LIMB_SIZE; ++i){
42- res.limb[i] = (1u<<31u)-1u;
43- }
44- res.sign = 1;
45- res.is_infinite = true;
46- return res;
47- }
48-
49- number number_one() {
50- number res = null_number();
51- res.limb[FRACTIONAL_SIZE] = 1u;
52- return res;
53- }
54-
55- number hp_neg(number a){
4+ inline std::string SRC_HIGH_PRECISION_FUNCTIONS_FRAG =
5+ R"shdr( number hp_neg(number a){
566 a.sign *= -1;
577 return a;
588}
@@ -344,7 +294,7 @@ number hp_div(number n, number d){
344294 q_hat = 0xFFFFu;
345295 r_hat = u_jn1 + v_n1;
346296 } else {
347- )shdr" R"shdr( q_hat = dividend / v_n1;
297+ q_hat = dividend / v_n1;
348298 r_hat = dividend % v_n1;
349299 }
350300
@@ -367,7 +317,7 @@ number hp_div(number n, number d){
367317 borrow = (diff < 0) ? 1u : 0u;
368318 }
369319 int final_diff = int(get_half(u, j + n_len)) - int(k) - int(borrow);
370- set_half(u, j + n_len, uint(final_diff) & 0xFFFFu );
320+ set_half(u, j + n_len, uint(final_diff) & 0x )shdr" R"shdr( FFFFu );
371321 if (final_diff < 0) {
372322 q_hat--;
373323 uint carry_hp_add = 0u;
@@ -658,7 +608,7 @@ number hp_cos(number x) {
658608 if (is_zero(term)) break;
659609
660610 if (i % 2 == 1) {
661- sum = hp_su )shdr" R"shdr( b (sum, term);
611+ sum = hp_sub (sum, term);
662612 } else {
663613 sum = hp_add(sum, term);
664614 }
@@ -690,7 +640,7 @@ number hp_atan(number z){
690640 sum = hp_sub(sum,iteration_term);
691641 }
692642 else{
693- sum = hp_add(sum,iteration_term);
643+ sum = hp_add(sum)shdr" R"shdr( ,iteration_term);
694644 }
695645 }
696646 return shift_left(sum, 1);
@@ -810,6 +760,64 @@ hp_vec2 hp_mult(number a, hp_vec2 b) {
810760 return initialize_hp_vec2(hp_mult(a, b.x), hp_mult(a, b.y));
811761})shdr" ;
812762
763+ inline std::string SRC_HIGH_PRECISION_HEADER_FRAG =
764+ R"shdr( #version 300 es
765+
766+ precision highp float;
767+
768+ const int LIMB_SIZE = 32;
769+ const int FRACTIONAL_SIZE = LIMB_SIZE/2;
770+
771+ struct number{
772+ uint limb[LIMB_SIZE];
773+ int sign;
774+ bool is_infinite;
775+ };
776+
777+ struct hp_vec2{
778+ number x;
779+ number y;
780+ };
781+
782+ hp_vec2 initialize_hp_vec2(number x, number y){
783+ hp_vec2 res;
784+ res.x = x;
785+ res.y = y;
786+ return res;
787+ }
788+
789+ number initialize_number(uint limb[LIMB_SIZE], int sign, bool is_infinite){
790+ number res;
791+ res.limb = limb;
792+ res.sign = sign;
793+ res.is_infinite = is_infinite;
794+ }
795+
796+ number null_number(){
797+ number res;
798+ for(int i = 0; i < LIMB_SIZE; ++i){
799+ res.limb[i] = 0u;
800+ }
801+ res.sign = 1;
802+ return res;
803+ }
804+
805+ number infinite_number(){
806+ number res;
807+ for(int i = 0; i < LIMB_SIZE; ++i){
808+ res.limb[i] = (1u<<31u)-1u;
809+ }
810+ res.sign = 1;
811+ res.is_infinite = true;
812+ return res;
813+ }
814+
815+ number number_one() {
816+ number res = null_number();
817+ res.limb[FRACTIONAL_SIZE] = 1u;
818+ return res;
819+ })shdr" ;
820+
813821inline std::string SRC_PICKER_FRAG =
814822 R"shdr( #version 300 es
815823precision highp float;
0 commit comments