我有以下问题:
我要做的是:
for _, v := range []int16{4336, -129, 8079} {
fmt.Printf("Source : %v\n", v)
fmt.Printf("Source hex: %4x\n", uint16(v))
fmt.Printf("Result hex: %4x\n", uint8(int8(v)))
fmt.Printf("Result : %4v\n", uint8(int8(v)))
fmt.Println()
}
那我不知道如何进行。有人可以告诉我该怎么做吗?谢谢!
答案 0 :(得分:1)
积分的蒙特卡洛近似如下:
set.seed(1)
f <- function(x,y) x^y * y^x
N <- 10000
mean(f(runif(N), runif(N)))
# 0.4293375
这可能是问题中所谓的“统一方法”。
与数值逼近进行比较(更好):
library(cubature)
f <- function(xy){
x <- xy[1]; y <- xy[2]
x^y * y^x
}
integral <- pcubature(f, lowerLimit = c(0,0), upperLimit = c(1,1))
integral$integral
# 0.4280186
Wolfram|Alpha给出0.42802
。
现在,通过采样Halton序列获得的近似值:
library(randtoolbox)
setSeed(1)
xy <- halton(n = N, dim = 2)
f <- function(x,y) x^y * y^x
mean(f(xy[,1], xy[,2]))
# 0.4277797
请注意,我不确定这是否是理想的答案,因为我还不知道什么是“命中或错过”方法。
我看了命中或遗漏方法。它包括在3D空间中采样点,并获取这些点在f
定义的表面以下的比例。这里的函数f
取[0,1]中的值,因此近似值如下:
library(randtoolbox)
setSeed(1)
xyz <- halton(n = N, dim = 3)
f <- function(x,y) x^y * y^x
mean(f(xyz[,1],xyz[,2]) > xyz[,3])
# 0.4287