Как высщитать доли процента?

Тема в разделе "WASM.BEGINNERS", создана пользователем 2FED, 22 апр 2008.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Собственно есть число, мне надо узнать сколько будет от этого числа например 0.7 процента, как это можно сделать?
     
  2. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    пропорцией
     
  3. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    умножить его на 0.7 процента (на 0.007) хехе. У вас там уже так поздно чтоли? =)
     
  4. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    на код

    mov ecx,0.07
    imul ecx

    выдаёт сообщение

    error A2050: real or BCD number not allowed

    чо за косяк?
     
  5. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    Используйте fpu.
    imul и mul для целых чисел со знаком и без.
     
  6. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    2FED
    или FPU или погугли арифметику с фиксированной точкой
     
  7. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    2FED
    Нужно смотреть на диапазон изменения Ваших чисел.

    Если нужны только челые числа то нужно смотреть в сторону арифметики с фиксированной разрядной сеткой. (IMUL; MUL) если нужна точность до 0.1% то можно выполнить масштабырование чисел с коэф. 1000.

    Результат = (Число*(процент*масштаб)) / масштаб
    для нашего случая:
    Результат = (Число*(0.007*1000)) / 1000

    Ну а если числа РЕАЛЬНЫЕ, то нужны числа с плавающей десятичной точкой. (FPU ...)
     
  8. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Зачем FPU?
    Код (Text):
    1. mov ecx,7
    2. imul ecx
    3. mov ecx,1000
    4. idiv ecx
    Или даже
    Код (Text):
    1. mov ecx,eax
    2. shl eax,3 ; тут можно три сложения eax,eax
    3. sub eax,ecx
    4. mov ecx,1000
    5. idiv ecx
    ------
    S_Alex опередил :)
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    [deleted]
     
  10. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    2FED
    Код (Text):
    1. ;1) -----------------------------------
    2. mov eax, число_от_которого_берут_процент
    3. imul eax,7
    4. mov ecx,1000
    5. xor edx,edx
    6. div ecx; в eax результат
    7. ;2) --------------------------------------
    8. mov eax, число_от_которого_берут_процент
    9. lea ecx,[eax+eax*2];ecx=eax*3
    10. lea eax,[ecx+eax*4];eax*=7
    11. mov ecx,1000
    12. xor edx,edx
    13. div ecx; в eax результат
    14. ;3) -----------------------------------------
    15. mov eax, число_от_которого_берут_процент
    16. mov ecx,143;1000/7=142,85714285714285714285714285714
    17. xor edx,edx
    18. div ecx; в eax результат
    19. ;4) ------------------------------------------
    20. ;Найти "магическое" число Х, чтобы 0,007=X/2³²
    21. ;X=7*2³²/1000=30064771,072
    22. mov eax, число_от_которого_берут_процент
    23. mov ecx,30064771; магическое число
    24. mul ecx; в edx результат
     
  11. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    А как узнать остаток? ну вот например если из еденицы надо вычислить долю процента, то получится 0 целых и какой то остаток должен быть
     
  12. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    2FED
    Два варианта:
    1) используешь целочисленную арифметику и масштабирование, например, предварительно умножаешь свое число на 100000, затем вычисляешь процент и при выводе устанавливаешь десятичный разделитель - запятую на нужное место
    2) используешь FPU
    Смотри внимательно тебе об этом уже написали
     
  13. deadly83

    deadly83 New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2007
    Сообщения:
    71
    2FED
    Есть простое и замечательное решение для тебя.
    1) качаешь ту http://www.wasm.ru/src/9/FPU_Work.zip
    2) распаковываешь и подключаешь в свой проект :) (там хелп нормальный все ясно как божий день)
    3) используешь элементарную пропорцию, где Х-исходное ичсло, У-0,7% от исходного
    Х==100%
    У==0,7%
    формула: y=(x*0,7)/100
    все.