Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
pcg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Bouillaguet Charles
pcg
Commits
aea1a534
Commit
aea1a534
authored
5 years ago
by
Bouillaguet Charles
Browse files
Options
Downloads
Patches
Plain Diff
backport des améliorations au cas où C est connu
parent
6df8dc0d
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
C/fonctions.c
+27
-7
27 additions, 7 deletions
C/fonctions.c
C/fonctions.h
+2
-3
2 additions, 3 deletions
C/fonctions.h
Cunknown/fonctions.c
+1
-0
1 addition, 0 deletions
Cunknown/fonctions.c
with
30 additions
and
10 deletions
C/fonctions.c
+
27
−
7
View file @
aea1a534
...
@@ -14,7 +14,7 @@ unsigned long long Greduite[9] = {
...
@@ -14,7 +14,7 @@ unsigned long long Greduite[9] = {
-
728312298332
,
5479732607037
,
6319848582548
-
728312298332
,
5479732607037
,
6319848582548
};
};
float
invG
[
9
]
=
{
double
invG
[
9
]
=
{
-
9.25221813226351e-14
,
2.32272588749499e-13
,
5.30001389997814e-15
,
-
9.25221813226351e-14
,
2.32272588749499e-13
,
5.30001389997814e-15
,
-
7.81560146462246e-14
,
-
4.52719459143047e-15
,
1.09411828555506e-13
,
-
7.81560146462246e-14
,
-
4.52719459143047e-15
,
1.09411828555506e-13
,
5.71040610630735e-14
,
3.06929503514353e-14
,
6.39750297008745e-14
5.71040610630735e-14
,
3.06929503514353e-14
,
6.39750297008745e-14
...
@@ -84,28 +84,48 @@ void getSumPol(unsigned long long* sumPol,unsigned long long* sumPolY, pcg128_t*
...
@@ -84,28 +84,48 @@ void getSumPol(unsigned long long* sumPol,unsigned long long* sumPolY, pcg128_t*
}
}
/* cf. https://stackoverflow.com/questions/17035464/a-fast-method-to-round-a-double-to-a-32-bit-int-explained#comment61972557_17035583 */
static
inline
long
long
crazy_round
(
double
x
)
{
union
{
double
d
;
long
long
l
;
}
magic
;
magic
.
d
=
x
+
6755399441055744
.
0
;
magic
.
l
<<=
13
;
magic
.
l
>>=
13
;
return
magic
.
l
;
}
static
inline
long
long
light_crazy_round
(
double
x
)
{
union
{
double
d
;
long
long
l
;
}
magic
;
magic
.
d
=
x
;
magic
.
l
<<=
13
;
magic
.
l
>>=
13
;
return
magic
.
l
;
}
/* sumPol/sumPolY are constant over many iterations. X (unrotated) and rot vary each time. */
/* sumPol/sumPolY are constant over many iterations. X (unrotated) and rot vary each time. */
int
solve
(
pcg128_t
*
S
,
const
unsigned
long
long
*
X
,
const
int
*
rot
,
const
unsigned
long
long
*
sumPol
,
const
unsigned
long
long
*
sumPolY
)
int
solve
(
pcg128_t
*
S
,
const
unsigned
long
long
*
X
,
const
int
*
rot
,
const
unsigned
long
long
*
sumPol
,
const
unsigned
long
long
*
sumPolY
)
{
{
unsigned
long
long
Y
[
nbiter
];
unsigned
long
long
Y
[
nbiter
];
unsigned
long
long
Yprim
[
nbiter
];
double
Yprim
[
nbiter
];
unsigned
long
long
tmp3
[
nbiter
];
unsigned
long
long
tmp3
[
nbiter
];
float
tmp2
[
nbiter
];
for
(
int
i
=
0
;
i
<
nbiter
;
i
++
)
{
for
(
int
i
=
0
;
i
<
nbiter
;
i
++
)
{
Y
[
i
]
=
(((
sumPol
[
i
]
^
X
[
i
])
%
(
1
<<
known_low
))
<<
known_up
)
+
(
rot
[
i
]
^
(
X
[
i
]
>>
(
k
-
known_up
)));
Y
[
i
]
=
(((
sumPol
[
i
]
^
X
[
i
])
%
(
1
<<
known_low
))
<<
known_up
)
+
(
rot
[
i
]
^
(
X
[
i
]
>>
(
k
-
known_up
)));
Yprim
[
i
]
=
(
Y
[
i
]
-
sumPolY
[
i
])
%
(
1
<<
(
known_low
+
known_up
));
Yprim
[
i
]
=
(
Y
[
i
]
-
sumPolY
[
i
])
%
(
1
<<
(
known_low
+
known_up
));
}
}
double
tmp2
[
nbiter
];
for
(
int
i
=
0
;
i
<
nbiter
;
i
++
)
{
for
(
int
i
=
0
;
i
<
nbiter
;
i
++
)
{
tmp2
[
i
]
=
0
;
tmp2
[
i
]
=
0
;
for
(
int
j
=
0
;
j
<
nbiter
;
j
++
)
for
(
int
j
=
0
;
j
<
nbiter
;
j
++
)
tmp2
[
i
]
+=
invG
[
i
*
nbiter
+
j
]
*
Yprim
[
j
];
tmp2
[
i
]
+=
invG
[
i
*
nbiter
+
j
]
*
Yprim
[
j
];
tmp2
[
i
]
+=
6755399441055744
.
0
;
}
}
for
(
int
i
=
0
;
i
<
nbiter
;
i
++
)
for
(
int
i
=
0
;
i
<
nbiter
;
i
++
)
tmp3
[
i
]
=
(
unsigned
long
long
)
round
f
(
tmp2
[
i
]);
tmp3
[
i
]
=
light_crazy_
round
(
tmp2
[
i
]);
unsigned
long
long
Sprim0
=
0
;
unsigned
long
long
Sprim0
=
0
;
for
(
int
j
=
0
;
j
<
nbiter
;
j
++
)
for
(
int
j
=
0
;
j
<
nbiter
;
j
++
)
...
...
This diff is collapsed.
Click to expand it.
C/fonctions.h
+
2
−
3
View file @
aea1a534
...
@@ -14,9 +14,8 @@ pcg128_t a;
...
@@ -14,9 +14,8 @@ pcg128_t a;
pcg128_t
c
;
pcg128_t
c
;
pcg128_t
polC
[
nbiter
];
pcg128_t
polC
[
nbiter
];
extern
unsigned
long
long
Greduite
[
9
];
// extern unsigned long long Greduite[9];
// extern double invG[9];
extern
float
invG
[
9
];
/***** Fonctions *****/
/***** Fonctions *****/
void
init_var_globales
();
void
init_var_globales
();
...
...
This diff is collapsed.
Click to expand it.
Cunknown/fonctions.c
+
1
−
0
View file @
aea1a534
...
@@ -106,6 +106,7 @@ static inline bool confirm(u64 Y0, u64 DS640, const struct task_t *task)
...
@@ -106,6 +106,7 @@ static inline bool confirm(u64 Y0, u64 DS640, const struct task_t *task)
return
1
;
return
1
;
}
}
/* cf. https://stackoverflow.com/questions/17035464/a-fast-method-to-round-a-double-to-a-32-bit-int-explained#comment61972557_17035583 */
static
inline
long
long
crazy_round
(
double
x
)
static
inline
long
long
crazy_round
(
double
x
)
{
{
union
{
double
d
;
long
long
l
;
}
magic
;
union
{
double
d
;
long
long
l
;
}
magic
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment