1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

transformer: fix precalculations of simple expressions involving floating literals, with -prod (fix VSL tests with -prod)

This commit is contained in:
Delyan Angelov 2022-10-16 20:23:41 +03:00
parent d857e97d8c
commit 3d2e251bf2
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
3 changed files with 39 additions and 2 deletions

View File

@ -0,0 +1,30 @@
import math
struct Sample {
value f64
literal f64
}
fn s(literal f64, value f64) Sample {
return Sample{value, literal}
}
fn main() {
mut samples := [
s(1.0000000000000000, 1_000_000.0 * 10.0 / 10_000_000.0),
s(0.3333333333333300, 1.0 / 3.0),
s(2.5000000000000000, 10 / 4.0),
s(0.6666666666666600, 2.0 / 3.0),
s(0.1000000000000000, 1 / 10.0),
s(3.1415926535897932, math.pi),
]
mut fails := 0
for sample in samples {
equal := math.abs(sample.value - sample.literal) < 0.00000000001
eprintln('> sample.value: ${sample.value:20.16f} | sample.literal: ${sample.literal:20.16f} | equal: $equal')
if !equal {
fails++
}
}
eprintln('> FAILS: $fails .')
}

View File

@ -0,0 +1,7 @@
> sample.value: 1.0000000000000000 | sample.literal: 1.0000000000000000 | equal: true
> sample.value: 0.3333333333333333 | sample.literal: 0.3333333333333300 | equal: true
> sample.value: 2.5000000000000000 | sample.literal: 2.5000000000000000 | equal: true
> sample.value: 0.6666666666666666 | sample.literal: 0.6666666666666600 | equal: true
> sample.value: 0.1000000000000000 | sample.literal: 0.1000000000000000 | equal: true
> sample.value: 3.1415926535897930 | sample.literal: 3.1415926535897930 | equal: true
> FAILS: 0 .

View File

@ -866,8 +866,8 @@ pub fn (mut t Transformer) infix_expr(mut node ast.InfixExpr) ast.Expr {
ast.FloatLiteral {
match mut node.right {
ast.FloatLiteral {
left_val := node.left.val.f32()
right_val := node.right.val.f32()
left_val := node.left.val.f64()
right_val := node.right.val.f64()
match node.op {
.eq {
return ast.BoolLiteral{