Skip to content

fananchong/test_fixint

Repository files navigation

libfixmath

精度

libfixmath 乘除精度太低了,计算出来的值,小数点第2位就错啦;还有 BUG , 1000 * 33 就错啦,应该溢出了

[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.1
num1:1999.500000, num2:1.100000
add, a1=44FA1333(2000.599976), a2=44FA1333(2000.599976)
sub, a1=44F9CCCD(1998.400024), a2=44F9CCCD(1998.400024)
mul, a1=45097733(2199.449951), a2=45097765(2199.462158)
div, a1=44E33745(1817.727173), a2=44E336F3(1817.717163)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.2
num1:1999.500000, num2:1.200000
add, a1=44FA1666(2000.699951), a2=44FA1666(2000.699951)
sub, a1=44F9C99A(1998.300049), a2=44F9C99A(1998.300049)
mul, a1=4515F667(2399.400146), a2=4515F64D(2399.393799)
div, a1=44D047FF(1666.249878), a2=44D04823(1666.254272)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.3
num1:1999.500000, num2:1.300000
add, a1=44FA199A(2000.800049), a2=44FA199A(2000.800049)
sub, a1=44F9C666(1998.199951), a2=44F9C666(1998.199951)
mul, a1=45227599(2599.349854), a2=452275B3(2599.356201)
div, a1=44C04277(1538.077026), a2=44C04259(1538.073364)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.4
num1:1999.500000, num2:1.400000
add, a1=44FA1CCD(2000.900024), a2=44FA1CCD(2000.900024)
sub, a1=44F9C333(1998.099976), a2=44F9C333(1998.099976)
mul, a1=452EF4CD(2799.300049), a2=452EF49B(2799.287842)
div, a1=44B286DC(1428.214355), a2=44B2870E(1428.220459)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.5
num1:1999.500000, num2:1.500000
add, a1=44FA2000(2001.000000), a2=44FA2000(2001.000000)
sub, a1=44F9C000(1998.000000), a2=44F9C000(1998.000000)
mul, a1=453B7400(2999.250000), a2=453B7400(2999.250000)
div, a1=44A6A000(1333.000000), a2=44A6A000(1333.000000)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.6
num1:1999.500000, num2:1.600000
add, a1=44FA2333(2001.099976), a2=44FA2333(2001.099976)
sub, a1=44F9BCCD(1997.900024), a2=44F9BCCD(1997.900024)
mul, a1=4547F333(3199.199951), a2=4547F365(3199.212158)
div, a1=449C3600(1249.687500), a2=449C35D9(1249.682739)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.7
num1:1999.500000, num2:1.700000
add, a1=44FA2666(2001.199951), a2=44FA2666(2001.199951)
sub, a1=44F9B99A(1997.800049), a2=44F9B99A(1997.800049)
mul, a1=45547267(3399.150146), a2=4554724D(3399.143799)
div, a1=449305A5(1176.176392), a2=449305B7(1176.178589)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.8
num1:1999.500000, num2:1.800000
add, a1=44FA299A(2001.300049), a2=44FA299A(2001.300049)
sub, a1=44F9B666(1997.699951), a2=44F9B666(1997.699951)
mul, a1=4560F199(3599.099854), a2=4560F1B3(3599.106201)
div, a1=448ADAAB(1110.833374), a2=448ADA9B(1110.831421)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.5 1.9
num1:1999.500000, num2:1.900000
add, a1=44FA2CCD(2001.400024), a2=44FA2CCD(2001.400024)
sub, a1=44F9B333(1997.599976), a2=44F9B333(1997.599976)
mul, a1=456D70CD(3799.050049), a2=456D709B(3799.037842)
div, a1=44838BCA(1052.368408), a2=44838BE6(1052.371826)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1000 33
num1:1000.000000, num2:33.000000
add, a1=44812000(1033.000000), a2=44812000(1033.000000)
sub, a1=4471C000(967.000000), a2=4471C000(967.000000)
mul, a1=4700E800(33000.000000), a2=C7000000(-32768.000000)
div, a1=41F26C9B(30.303030), a2=41F26C98(30.303024)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.1
num1:1999.900024, num2:1.100000
add, a1=44FA2000(2001.000000), a2=44FA2000(2001.000000)
sub, a1=44F9D99A(1998.800049), a2=44F9D99A(1998.800049)
mul, a1=45097E3E(2199.890137), a2=45097E70(2199.902344)
div, a1=44E342E9(1818.090942), a2=44E34296(1818.080811)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.2
num1:1999.900024, num2:1.200000
add, a1=44FA2333(2001.099976), a2=44FA2333(2001.099976)
sub, a1=44F9D667(1998.700073), a2=44F9D667(1998.700073)
mul, a1=4515FE15(2399.880127), a2=4515FDFC(2399.874023)
div, a1=44D052AA(1666.583252), a2=44D052CE(1666.587646)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.3
num1:1999.900024, num2:1.300000
add, a1=44FA2667(2001.200073), a2=44FA2667(2001.200073)
sub, a1=44F9D333(1998.599976), a2=44F9D333(1998.599976)
mul, a1=45227DEB(2599.869873), a2=45227E05(2599.876221)
div, a1=44C04C4F(1538.384644), a2=44C04C31(1538.380981)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.4
num1:1999.900024, num2:1.400000
add, a1=44FA299A(2001.300049), a2=44FA299A(2001.300049)
sub, a1=44F9D000(1998.500000), a2=44F9D000(1998.500000)
mul, a1=452EFDC3(2799.860107), a2=452EFD91(2799.847900)
div, a1=44B29000(1428.500000), a2=44B29033(1428.506226)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.5
num1:1999.900024, num2:1.500000
add, a1=44FA2CCD(2001.400024), a2=44FA2CCD(2001.400024)
sub, a1=44F9CCCD(1998.400024), a2=44F9CCCD(1998.400024)
mul, a1=453B7D9A(2999.850098), a2=453B7D9A(2999.850098)
div, a1=44A6A889(1333.266724), a2=44A6A889(1333.266724)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.6
num1:1999.900024, num2:1.600000
add, a1=44FA3000(2001.500000), a2=44FA3000(2001.500000)
sub, a1=44F9C99A(1998.300049), a2=44F9C99A(1998.300049)
mul, a1=4547FD71(3199.840088), a2=4547FDA3(3199.852295)
div, a1=449C3E00(1249.937500), a2=449C3DD9(1249.932739)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.7
num1:1999.900024, num2:1.700000
add, a1=44FA3333(2001.599976), a2=44FA3333(2001.599976)
sub, a1=44F9C667(1998.200073), a2=44F9C667(1998.200073)
mul, a1=45547D48(3399.830078), a2=45547D2F(3399.823975)
div, a1=44930D2D(1176.411743), a2=44930D3F(1176.413940)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.8
num1:1999.900024, num2:1.800000
add, a1=44FA3667(2001.700073), a2=44FA3667(2001.700073)
sub, a1=44F9C333(1998.099976), a2=44F9C333(1998.099976)
mul, a1=4560FD1F(3599.820068), a2=4560FD38(3599.826172)
div, a1=448AE1C7(1111.055542), a2=448AE1B8(1111.053711)
[fananchong@host-192-168-23-57 Release]$ ./testfixint 2 1999.9 1.9
num1:1999.900024, num2:1.900000
add, a1=44FA399A(2001.800049), a2=44FA399A(2001.800049)
sub, a1=44F9C000(1998.000000), a2=44F9C000(1998.000000)
mul, a1=456D7CF6(3799.810059), a2=456D7CC4(3799.797852)
div, a1=44839287(1052.578979), a2=448392A2(1052.582275)
基准测试
[fananchong@host-192-168-23-57 Release]$ ./testfixint  1 1000000
normal add      count: 1000000          cost:3 ms       3 ns/op
fix16 add       count: 1000000          cost:5 ms       5 ns/op
normal sub      count: 1000000          cost:2 ms       2 ns/op
fix16 sub       count: 1000000          cost:6 ms       6 ns/op
normal mul      count: 1000000          cost:2 ms       2 ns/op
fix16 mul       count: 1000000          cost:8 ms       8 ns/op
normal div      count: 1000000          cost:2 ms       2 ns/op
fix16 div       count: 1000000          cost:25 ms      25 ns/op
normal sin      count: 1000000          cost:10 ms      10 ns/op
fix16 sin       count: 1000000          cost:10 ms      10 ns/op

truesync

truesync Q31.32 使用 32 位来保存小数部分,浮点数整型化时不会发生截断,从而保证了精度不会丢失; libfixmath Q16.16 浮点数整型化时必然会出现截断现象,它使用四舍五入算法,但是没法保证精度不会丢失

num1:1999.5, num2:1.1
add, a1=44FA1333(2000.6), a2=44FA1333(2000.6)
sub, a1=44F9CCCD(1998.4), a2=44F9CCCD(1998.4)
mul, a1=45097733(2199.45), a2=45097733(2199.45)
div, a1=44E33745(1817.727), a2=44E33745(1817.727)
num1:1999.5, num2:1.2
add, a1=44FA1666(2000.7), a2=44FA1666(2000.7)
sub, a1=44F9C99A(1998.3), a2=44F9C99A(1998.3)
mul, a1=4515F667(2399.4), a2=4515F667(2399.4)
div, a1=44D047FF(1666.25), a2=44D047FF(1666.25)
num1:1999.5, num2:1.3
add, a1=44FA199A(2000.8), a2=44FA199A(2000.8)
sub, a1=44F9C666(1998.2), a2=44F9C666(1998.2)
mul, a1=45227599(2599.35), a2=45227599(2599.35)
div, a1=44C04277(1538.077), a2=44C04277(1538.077)
num1:1999.5, num2:1.4
add, a1=44FA1CCD(2000.9), a2=44FA1CCD(2000.9)
sub, a1=44F9C333(1998.1), a2=44F9C333(1998.1)
mul, a1=452EF4CD(2799.3), a2=452EF4CD(2799.3)
div, a1=44B286DC(1428.214), a2=44B286DC(1428.214)
num1:1999.5, num2:1.5
add, a1=44FA2000(2001), a2=44FA2000(2001)
sub, a1=44F9C000(1998), a2=44F9C000(1998)
mul, a1=453B7400(2999.25), a2=453B7400(2999.25)
div, a1=44A6A000(1333), a2=44A6A000(1333)
num1:1999.5, num2:1.6
add, a1=44FA2333(2001.1), a2=44FA2333(2001.1)
sub, a1=44F9BCCD(1997.9), a2=44F9BCCD(1997.9)
mul, a1=4547F333(3199.2), a2=4547F333(3199.2)
div, a1=449C3600(1249.688), a2=449C3600(1249.688)
num1:1999.5, num2:1.7
add, a1=44FA2666(2001.2), a2=44FA2666(2001.2)
sub, a1=44F9B99A(1997.8), a2=44F9B99A(1997.8)
mul, a1=45547267(3399.15), a2=45547267(3399.15)
div, a1=449305A5(1176.176), a2=449305A5(1176.176)
num1:1999.5, num2:1.8
add, a1=44FA299A(2001.3), a2=44FA299A(2001.3)
sub, a1=44F9B666(1997.7), a2=44F9B666(1997.7)
mul, a1=4560F199(3599.1), a2=4560F199(3599.1)
div, a1=448ADAAB(1110.833), a2=448ADAAB(1110.833)
num1:1999.5, num2:1.9
add, a1=44FA2CCD(2001.4), a2=44FA2CCD(2001.4)
sub, a1=44F9B333(1997.6), a2=44F9B333(1997.6)
mul, a1=456D70CD(3799.05), a2=456D70CD(3799.05)
div, a1=44838BCA(1052.368), a2=44838BCA(1052.368)
num1:1000, num2:33
add, a1=44812000(1033), a2=44812000(1033)
sub, a1=4471C000(967), a2=4471C000(967)
mul, a1=4700E800(33000), a2=4700E800(33000)
div, a1=41F26C9B(30.30303), a2=41F26C9B(30.30303)
num1:1999.9, num2:1.1
add, a1=44FA2000(2001), a2=44FA2000(2001)
sub, a1=44F9D99A(1998.8), a2=44F9D99A(1998.8)
mul, a1=45097E3E(2199.89), a2=45097E3E(2199.89)
div, a1=44E342E9(1818.091), a2=44E342E9(1818.091)
num1:1999.9, num2:1.2
add, a1=44FA2333(2001.1), a2=44FA2333(2001.1)
sub, a1=44F9D667(1998.7), a2=44F9D667(1998.7)
mul, a1=4515FE15(2399.88), a2=4515FE15(2399.88)
div, a1=44D052AA(1666.583), a2=44D052AA(1666.583)
num1:1999.9, num2:1.3
add, a1=44FA2667(2001.2), a2=44FA2667(2001.2)
sub, a1=44F9D333(1998.6), a2=44F9D333(1998.6)
mul, a1=45227DEB(2599.87), a2=45227DEB(2599.87)
div, a1=44C04C4F(1538.385), a2=44C04C4F(1538.385)
num1:1999.9, num2:1.4
add, a1=44FA299A(2001.3), a2=44FA299A(2001.3)
sub, a1=44F9D000(1998.5), a2=44F9D000(1998.5)
mul, a1=452EFDC3(2799.86), a2=452EFDC3(2799.86)
div, a1=44B29000(1428.5), a2=44B29000(1428.5)
num1:1999.9, num2:1.5
add, a1=44FA2CCD(2001.4), a2=44FA2CCD(2001.4)
sub, a1=44F9CCCD(1998.4), a2=44F9CCCD(1998.4)
mul, a1=453B7D9A(2999.85), a2=453B7D9A(2999.85)
div, a1=44A6A889(1333.267), a2=44A6A889(1333.267)
num1:1999.9, num2:1.6
add, a1=44FA3000(2001.5), a2=44FA3000(2001.5)
sub, a1=44F9C99A(1998.3), a2=44F9C99A(1998.3)
mul, a1=4547FD71(3199.84), a2=4547FD71(3199.84)
div, a1=449C3E00(1249.938), a2=449C3E00(1249.938)
num1:1999.9, num2:1.7
add, a1=44FA3333(2001.6), a2=44FA3333(2001.6)
sub, a1=44F9C667(1998.2), a2=44F9C667(1998.2)
mul, a1=45547D48(3399.83), a2=45547D48(3399.83)
div, a1=44930D2D(1176.412), a2=44930D2D(1176.412)
num1:1999.9, num2:1.8
add, a1=44FA3667(2001.7), a2=44FA3667(2001.7)
sub, a1=44F9C333(1998.1), a2=44F9C333(1998.1)
mul, a1=4560FD1F(3599.82), a2=4560FD1F(3599.82)
div, a1=448AE1C7(1111.056), a2=448AE1C7(1111.056)
num1:1999.9, num2:1.9
add, a1=44FA399A(2001.8), a2=44FA399A(2001.8)
sub, a1=44F9C000(1998), a2=44F9C000(1998)
mul, a1=456D7CF6(3799.81), a2=456D7CF6(3799.81)
div, a1=44839287(1052.579), a2=44839287(1052.579)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published