小编Mic*_*kov的帖子

宏代替GAS中的常数

X86 GNU Assembly上的宏有什么问题?它表示符号S在链接期间未定义.

.macro S size=40
\size
.endm
Run Code Online (Sandbox Code Playgroud)

我正在使用它

mov %eax, S
Run Code Online (Sandbox Code Playgroud)

x86 assembly gnu gnu-assembler

8
推荐指数
1
解决办法
3184
查看次数

准确评估1/1 + 1/2 + ... 1/n行

我需要评估行的总和:1/1 + 1/2 + 1/3 + ... + 1/n.考虑到在C++评估中并不完全准确,求和的顺序起着重要作用.1/n + 1 /(n-1)+ ... + 1/2 + 1/1表达式给出更准确的结果.所以我需要找出求和的顺序,它提供了最大的准确性.我甚至不知道从哪里开始.首选的实现语言是C++.对不起我的英文,如果有任何错误.

c++ sum ieee-754

7
推荐指数
4
解决办法
2129
查看次数

如何在层次结构中查找数据项位置?

我需要开发一种算法,可以在某个层次结构中定位数据项位置.我有一个层次结构,对某些数据集的元素进行分类.层次结构是分类的 - 顶级元素是最通用的类​​,它匹配数据集的任何元素,更深层的元素包含与数据集的某个子集匹配的更具体的类.

例如,考虑游艇的层次结构.我们有顶级游艇.在下一个级别,我们有帆船游艇机动游艇.帆船游艇有两个孩子 - 巡航游艇赛艇游艇.巡洋舰可以由制造商进一步划分,例如Bavaria YachtsDufour Yachts.然后,每个类可以进一步除以船体类型,长度,风帆面积等.

这是数据集中的一个示例:

Drive   Class   Manufacturer   Hull type Len  Sails Area ... Model
Sailing Cruiser Bavaria Yachts Mono-hull 25ft 560sqft    ... Bavaria 32
Sailing Cruiser Dufour Yachts  Mono-hull 27ft 580sqft    ... Dufour 32 Classic
Run Code Online (Sandbox Code Playgroud)

通过深度优先顺序搜索,我可以轻松地将每个样本映射到层次结构.

乍一看这是一个简单的搜索问题,但存在一些困难.

第一个难点:数据项不必包含所有元素.数据项通常缺少10%到50%的元素.许多这些元素并不是很重要,例如游艇Drive只能是MotorSail,所以它不会带来很多信息(只有1位).可以使用更重要的元素轻松推断这些元素,例如,如果我们知道游艇模型,我们可以推断出数据项的所有其他元素(或字段).

第二个难点:某些元素可能因不同数据项而异,即使它们对应于层次结构中的相同位置(相同的游艇模型).例如,帆船区域可能会有很大差异,因为船主以不同的方式修改游艇的装备或仅仅是圆形区域值.

正如我已经提到的,我需要从层次结构中的数据集中找到不同的数据项.每个数据项可以以不同的精度定位.精度是层次结构中搜索过程停止的深度.换句话说,我需要在层次结构中获取与每个数据项对应的路径,并且此路径可能不完整.例如,算法可以发现数据项对应于Juliet 23游艇,但生产年份仍然是未知的.

如果我可以为每个路径获得具有概率测量的多个路径,那将会很酷.例如,算法可以为不同的生产年份返回Juliet 23的 4条路径,每条路径的概率为25%.

此时我使用深度优先搜索和一些启发式方法解决了这个问题.它给出了很好的结果,但我认为可以获得更好的结果.也许你可以用更通用的方式来表达这个问题,这样我就可以搜索一些关于它的学术论文.

algorithm

5
推荐指数
1
解决办法
199
查看次数

有没有办法在正则表达式中定义自定义短序?

我有一个表格的正则表达式

def parse(self, format_string):
    for m in re.finditer(
        r"""(?: \$ \( ( [^)]+ ) \) )   # the field access specifier
          | (
                (?:
                    \n | . (?= \$ \( ) # any one single character before the '$('
                )
              | (?:
                    \n | . (?! \$ \( ) # any one single character, except the one before the '$('
                )*
            )""",
        format_string,
        re.VERBOSE):
    ...
Run Code Online (Sandbox Code Playgroud)

我想\$ \(用一些自定义简写"常量" 替换所有重复序列(),如下所示:

def parse(self, format_string):
    re.<something>('\BEGIN = \$\(')
    for m in re.finditer( …
Run Code Online (Sandbox Code Playgroud)

regex

5
推荐指数
1
解决办法
269
查看次数

有没有办法执行原子CMake构建?

我正在考虑重新实现我们的构建系统(目前基于GNU Make)CMake.

免责声明:这更像是一个理论和"最佳实践"问题.我不知道CMake深入.此外,如果问题更多,请随时将问题迁移给程序员.

据我所知,标准的工作流程CMake

cmake .
make
Run Code Online (Sandbox Code Playgroud)

我怀疑可能存在CMake文件和Makefile 的去同步问题.

所以,在平时的开发过程中你应该运行make,以避免不必要的重建CMakeCacheMakefiles一般使这一过程更加简单.但是,如果你添加一个新的源文件CMakeLists并运行make它,它将使用旧的CMakeCache,Makefiles并且不会自动重新生成它们.我认为在大规模使用时可能会导致重大问题,因为如果某些东西没有按照它应该构建,你将不得不尝试执行make clean,然后,如果它没有帮助,你将需要删除CMakeCache并重新生成一切(手动!).

如果我对上述内容不对,请纠正我.

我想做

awesome-cmake
Run Code Online (Sandbox Code Playgroud)

并让它更新所有需要更新和构建项目的内容.

所以,问题是:有没有办法用CMake进行"原子构建",以便跟踪所有必需的信息并抽象出使用make

build-process makefile build cmake

3
推荐指数
1
解决办法
579
查看次数

为什么我不能在Haskell中将查找结果与Nothing进行比较?

我有以下代码:

import System.Environment
import System.Directory
import System.IO
import Data.List

dispatch :: [(String, [String] -> IO ())]
dispatch =  [ ("add", add)
            , ("view", view)
            , ("remove", remove)
            , ("bump", bump)
            ]

main = do
    (command:args) <- getArgs
    let result = lookup command dispatch
    if result == Nothing then
        errorExit
    else do
        let (Just action) = result
        action args

errorExit :: IO ()
errorExit = do
    putStrLn "Incorrect command"

add :: [String] -> IO ()
add [fileName, todoItem] = appendFile fileName …
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
2
解决办法
1957
查看次数

为什么我的Random实例表现不正确?

我有以下来源

-- Quantity.hs
import System.Random

data Quantity = Quantity Integer deriving (Show)

instance Random Quantity where
    randomR (Quantity lo, Quantity hi) g =
        let rand = randomR (lo, hi) g
            (r, g) = rand
        in (Quantity r, g)
    random g =
        let rand = random g
            (r, g) = rand
        in (Quantity r, g)
Run Code Online (Sandbox Code Playgroud)

当我这样做的ghci Quantity.hs

let g = mkStdGen 0
let (r, g1) = random g :: (Quantity, StdGen)
r
Run Code Online (Sandbox Code Playgroud)

最后一步的输出是

Quantity <no newline>
Run Code Online (Sandbox Code Playgroud)

并且计算显然是挂起,但CPU没有做任何事情(通过系统监视器确认).

同时

let …
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
162
查看次数

QuickCheck测试随机挂起

我是Haskell的新手.我正在玩QuickCheck测试,尝试测试一个简单的功能calculateStrengthSingle(参见下面的测试人员来源)

# Fighter.hs
module Fighter
( Quantity(Quantity)
, Fighter(TeamPlayer, LoneWolf, Polymorph)
, Strength(Strength)
, calculateStrengthSingle)
where

import System.Random

data Strength = Strength Double

instance Eq Strength where
    Strength s1 == Strength s2 =
        s1 == s2

instance Ord Strength where
    Strength s1 < Strength s2 =
        s1 < s2

data Quantity = Quantity Int deriving (Show)

instance Random Quantity where
    randomR (Quantity lo, Quantity hi) g =
        let rand = randomR (lo, hi) g
            (r, g1) = rand …
Run Code Online (Sandbox Code Playgroud)

haskell quickcheck

1
推荐指数
1
解决办法
634
查看次数